how to perform file upload using Volley in android?

我的梦境 提交于 2019-12-12 19:18:21

问题


I want to upload files(images,documents etc) from my android application to my server.I'm using Volley library for network calls in my application.

I'm using the following code to upload files but it is not performing any operation.(showing volley timeout error finally)

public class MultipartRequest extends Request<String> {

    private MultipartEntity entity = new MultipartEntity();

    private static final String FILE_PART_NAME = "file";


    private final Response.Listener<String> mListener;
    private final File mFilePart;
    private  String mStringPart,accessToken;

    public MultipartRequest(String url, Response.ErrorListener errorListener, Response.Listener<String> listener, File file,String accessToken)
    {
        super(Method.POST, url, errorListener);

        mListener = listener;
        mFilePart = file;
        this.accessToken = accessToken;
        buildMultipartEntity();
    }

    private void buildMultipartEntity()
    {
        entity.addPart(FILE_PART_NAME, new FileBody(mFilePart));
        try
        {
            entity.addPart("Content-Disposition", new StringBody("form-data"));
            entity.addPart("dir_path", new StringBody("IzEzOjE3"));
        }
        catch (UnsupportedEncodingException e)
        {
            VolleyLog.e("UnsupportedEncodingException");
        }
    }

    @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("Content-Type", "multipart/form-data");
        headers.put("_pkta",accessToken);


        return headers;
    }
    @Override
    public String getBodyContentType()
    {
        return entity.getContentType().getValue();
    }

    @Override
    public byte[] getBody() throws AuthFailureError
    {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try
        {
            entity.writeTo(bos);
        }
        catch (IOException e)
        {
            VolleyLog.e("IOException writing to ByteArrayOutputStream");
        }
        return bos.toByteArray();
    }

    @Override
    protected Response<String> parseNetworkResponse(NetworkResponse response)
    {
        return Response.success("Uploaded", getCacheEntry());
    }

    @Override
    protected void deliverResponse(String response)
    {
        mListener.onResponse(response);
    }
}

please help me on how to implement file upload in android(either by volley or any other)


回答1:


Try

public MultiPartRequest(String url, String filePath, Response.Listener<String> listener, Response.ErrorListener errorListener)
{
    super(Method.POST, url, errorListener);
    entity = new  MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
    file = new File(filePath);
    mListener = listener;
    buildMultipartEntity();
}

also, in my case I didn't override getHeaders, just passed other values with addPart, e.g:

    entity.addPart("file", new FileBody(file, "image/jpeg")); // for image
    entity.addPart("id", new StringBody(userid));

hope this helps.



来源:https://stackoverflow.com/questions/30530451/how-to-perform-file-upload-using-volley-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!