How to do upload image with Volley library?

前端 未结 2 1172
傲寒
傲寒 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<T> extends Request<T> {
    
        private MultipartEntityBuilder mBuilder = MultipartEntityBuilder.create();
        private final Response.Listener<T> mListener;
        private final File yourImageFile;
        protected Map<String, String> headers;
    
        public ImageUploadWithVolley(String url, ErrorListener errorListener, Listener<T> listener, File imageFile)   {
            super(Method.POST, url, errorListener); 
            mListener = listener;
            yourImageFile = imageFile;        
            addImageEntity();
        }
    
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headers = super.getHeaders();
            if (headers == null
                    || headers.equals(Collections.emptyMap())) {
                headers = new HashMap<String, String>();
            }
            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<T> parseNetworkResponse(NetworkResponse response){
            T result = null;
            return Response.success(result, HttpHeaderParser.parseCacheHeaders(response));
        }
    
        @Override
        protected void deliverResponse(T response) {
            mListener.onResponse(response);
        }
    }
    
    0 讨论(0)
  • 2020-12-11 20:46

    i am not much familier with volley, but give a try to the following code

    //JSON Request

    public MySampleImageUpload() { 
        JSONRequestResponse mResponse = new  
        JSONRequestResponse(mContext);
    
        Bundle parms = new Bundle();
        parms.putString("key_meail", "rojesh@demo.com");
        parms.setFile("key_url", image_path);
    
        mResponse.getResponse("sample_upload_data_url", REQUEST_CODE, this,
            parms);
    }
    

    // In SetFile & getResponse code

    package com.fartogram.utils;
    
    import java.io.File;
    
    import org.json.JSONObject;
    
    import android.content.Context;
    import android.os.Bundle;
    
    import com.android.volley.Request;
    import com.android.volley.Response;
    import com.android.volley.VolleyError;
    import com.android.volley.examples.toolbox.MultipartRequest;
    import com.android.volley.examples.toolbox.MyVolley;
    import com.android.volley.toolbox.JsonObjectRequest;
    
    public class JSONRequestResponse {
    
        public JSONRequestResponse(Context cntx) {
            mContext = cntx;
        }
    
        private final Context mContext;
        private int reqCode;
        private IParseListener listner;
    
        private boolean isFile = false;
        private String file_path = "", key = "";
    
        public void getResponse(String url, final int requestCode,
                IParseListener mParseListener) {
            getResponse(url, requestCode, mParseListener, null);
        }
    
        public void getResponse(String url, final int requestCode,
                IParseListener mParseListener, Bundle params) {
            this.listner = mParseListener;
            this.reqCode = requestCode;
    
            Response.Listener<JSONObject> sListener = new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    if (listner != null) {
                        listner.SuccessResponse(response, reqCode);
                    }
                }
            };
    
            Response.ErrorListener eListener = new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    if (listner != null) {
                        listner.ErrorResponse(error, reqCode);
                    }
                }
            };
    
            if (!isFile) {
                JsonObjectRequest jsObjRequest = new JsonObjectRequest(
                    Request.Method.GET, url, null, sListener, 
    
    eListener);
                MyVolley.getRequestQueue().add(jsObjRequest);
            } else {
                    if (file_path != null) {
                        File mFile = new File(file_path);
                        MultipartRequest multipartRequest = 
        new MultipartRequest(url,eListener, sListener, key, mFile, params);
                    MyVolley.getRequestQueue().add(multipartRequest);
                } 
            }
        }
    
        public boolean isFile() {
            return isFile;
        }
    
    
        public void setFile(String param, String path) {
            if (path != null && param != null) {
                key = param;
                file_path = path;
                this.isFile = true;
            }
        }
    
    }
    

    If it works for you mark it as right :)

    0 讨论(0)
提交回复
热议问题