multipart data using Android Volley

来源:互联网 发布:兰亭序周杰伦知乎 编辑:程序博客网 时间:2024/06/15 14:13

I am using Volley for calling web request for my app. But as i am Volley for first time. I just want to know that how to upload image/video media data via volley using multipart.

I searched for it many sites, I got some results over

How to send a “multipart/form-data” POST in Android with Volley

But, these methods does’nt look good or efficients. So, Please help me that how to upload media data using volley. Or i should not use Volley, and should go for the previous manual approach

Anyway, all thoughts and answers are extremely appreciated. Thank you for your help.

原文链接

解决方案:

import java.io.ByteArrayOutputStream;import java.io.File;import java.io.IOException;import java.util.Map;import org.apache.http.HttpEntity;import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.FileBody; import com.android.volley.AuthFailureError;import com.android.volley.NetworkResponse;import com.android.volley.Request;import com.android.volley.Response;import com.android.volley.VolleyLog;public class MultipartRequest extends Request<String> {// private MultipartEntity entity = new MultipartEntity(); MultipartEntityBuilder entity = MultipartEntityBuilder.create();HttpEntity httpentity;private static final String FILE_PART_NAME = "file";private final Response.Listener<String> mListener;private final File mFilePart;private final Map<String, String> mStringPart;public MultipartRequest(String url, Response.ErrorListener errorListener,        Response.Listener<String> listener, File file,        Map<String, String> mStringPart) {    super(Method.POST, url, errorListener);    mListener = listener;    mFilePart = file;    this.mStringPart = mStringPart;    entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);    buildMultipartEntity(); } public void addStringBody(String param, String value) {    mStringPart.put(param, value);} private void buildMultipartEntity() {     entity.addPart(FILE_PART_NAME, new FileBody(mFilePart));    for (Map.Entry<String, String> entry : mStringPart.entrySet()) {        entity.addTextBody(entry.getKey(), entry.getValue());    } } @Override public String getBodyContentType() {    return httpentity.getContentType().getValue();} @Override public byte[] getBody() throws AuthFailureError {    ByteArrayOutputStream bos = new ByteArrayOutputStream();    try {         httpentity = entity.build();        httpentity.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);} } 

注意需要在http://hc.apache.org/downloads.cgi 下载httpcomponents-client-*
解压之后,导入以下三个jar包

httpmime, httpcore and httpclient
0 0
原创粉丝点击