How to do upload image with Volley library?

前端 未结 2 1176
傲寒
傲寒 2020-12-11 19:48

I have an image and I want to upload this image to my web service using Volley library, the problem is I\'m looking for a how to do it but still haven\'t found.

I fo

2条回答
  •  一生所求
    2020-12-11 20:25

    You have to extend Request and use MultipartEntityBuilder if you wanna upload your image as a file.

    public class ImageUploadWithVolley extends Request {
    
        private MultipartEntityBuilder mBuilder = MultipartEntityBuilder.create();
        private final Response.Listener mListener;
        private final File yourImageFile;
        protected Map headers;
    
        public ImageUploadWithVolley(String url, ErrorListener errorListener, Listener listener, File imageFile)   {
            super(Method.POST, url, errorListener); 
            mListener = listener;
            yourImageFile = imageFile;        
            addImageEntity();
        }
    
        @Override
        public Map getHeaders() throws AuthFailureError {
            Map headers = super.getHeaders();
            if (headers == null
                    || headers.equals(Collections.emptyMap())) {
                headers = new HashMap();
            }
            headers.put("Accept", "application/json");
            return headers;
        }
    
        private void addImageEntity() {
            mBuilder.addBinaryBody("give your image name", yourImageFile, ContentType.create("image/jpeg"), yourImageFile.getName());
            mBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            mBuilder.setLaxMode().setBoundary("xx").setCharset(Charset.forName("UTF-8"));
        }
    
        @Override
        public String getBodyContentType()   {
            String content = mBuilder.build().getContentType().getValue();
            return content;
        }
    
        @Override
        public byte[] getBody() throws AuthFailureError    {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            try {
                mBuilder.build().writeTo(bos);
            } catch (IOException e){
                VolleyLog.e("IOException writing to ByteArrayOutputStream bos, building the multipart request.");
            }        
            return bos.toByteArray();
        }
    
        @Override
        protected Response parseNetworkResponse(NetworkResponse response){
            T result = null;
            return Response.success(result, HttpHeaderParser.parseCacheHeaders(response));
        }
    
        @Override
        protected void deliverResponse(T response) {
            mListener.onResponse(response);
        }
    }
    

提交回复
热议问题