使用 Volley 自定义正文 post 请求上传文件

Upload files with Volley custom body post request

我需要使用 Android 中的 volley 库将 2 个文件发送到服务器。 有一个例子说明它在 Postman 中如何运作良好: 我需要在 android 中完全重现这个 POST 调用。 请暂时查看我的代码(无法正常工作):

JsonObjectRequest sr = new JsonObjectRequest(Request.Method.POST, URL, new JSONObject(params), new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {

            Log.i("Response", response.toString());

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            Log.e("VOLLEY", error.toString());
        }
    }){
        @Override
        protected Map<String,String> getParams(){
            Map<String,String> params = new HashMap<>();
            params.put("Urine", "test");

            return params;
        }

        @Override
        public Map<String, String> getHeaders() {
            Map<String,String> params = new HashMap<>();
            params.put("Authorization", "token");
            return params;
        }

        @Override
        public String getBodyContentType() {
            return "application/x-www-form-urlencoded; charset=utf-8";
        }

        @Override
        public byte[] getBody() {
            int size = (int) file.length();
            byte[] bytes = new byte[size];
            try {
                BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
                buf.read(bytes, 0, bytes.length);
                buf.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return bytes;
        }

        @Override
        protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
            byte[] data = response.data;
            String message = new String(data);
            Log.i("parseNetworkResponse", String.valueOf(message));

            return super.parseNetworkResponse(response);
        }
    };

如何使用 Volley 库实现它?谢谢。

在我看来,Retrofit 2 是一个更好、更容易用于文件上传的库。

这里有一个简单易用的教程。它应该能帮到你。

Retrofit 2 - Multifile Uploading