2013-08-17 9 views
29

का उपयोग कर डेटा को मल्टीपार्ट करने के लिए मैं अपने ऐप के लिए वेब अनुरोध को कॉल करने के लिए वॉली का उपयोग कर रहा हूं। लेकिन जैसा कि मैं पहली बार वॉली हूं। मैं सिर्फ यह जानना चाहता हूं कि मल्टीपार्ट का उपयोग करके वॉली के माध्यम से छवि/वीडियो मीडिया डेटा कैसे अपलोड करें।एंड्रॉइड वॉली

मैं इसे कई साइटों के लिए खोज की, मैं,

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

लेकिन अधिक कुछ परिणाम मिला इन तरीकों does'nt अच्छा है या efficients देखो। तो, कृपया मेरी मदद करें कि वॉली का उपयोग करके मीडिया डेटा कैसे अपलोड करें। या मुझे वॉली का उपयोग नहीं करना चाहिए, और पिछले मैनुअल दृष्टिकोण

के लिए जाना चाहिए, वैसे भी, सभी विचारों और उत्तरों की अत्यधिक सराहना की जाती है। आपके सहयोग के लिए धन्यवाद। यदि आप एक जवाब मिल गया है

+0

प्रगति के साथ अपलोड करना http://stackoverflow.com/a/28144660/185022 –

उत्तर

28

पता नहीं है, लेकिन आप इस कोशिश नहीं की है:

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); 
} 
    } 

आदेश में यह काम आप इस जावा httpclients का उपयोग करना चाहिए बनाने के लिए: http://hc.apache.org/downloads.cgi समय तक मैं यह जवाब लिख रहा हूं (02/07/14) जिस संस्करण का मैं उपयोग कर रहा हूं वह 4.3.2 है।

उम्मीद है कि यह मदद करता है!

+0

यह काम करता है ??? –

+0

हां, यह करता है। कोशिश करो ! – Leonardo

+0

एक आकर्षण की तरह काम करता है, यह जवाब स्वीकार किया जाना चाहिए! –

13

आपको वॉली के साथ मल्टीपार्ट का उपयोग करके छवि अपलोड करने के लिए नीचे दिए गए कोड का उपयोग करना होगा। यह मेरे ऐप में एक आकर्षण की तरह काम करता है।

public class MultipartRequest extends Request<String> { 

    private MultipartEntity entity = new MultipartEntity(); 

    private static final String FILE_PART_NAME = "file"; 
    private static final String STRING_PART_NAME = "text"; 

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

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

     mListener = listener; 
     mFilePart = file; 
     mStringPart = stringPart; 
     buildMultipartEntity(); 
    } 

    private void buildMultipartEntity() 
    { 
     entity.addPart(FILE_PART_NAME, new FileBody(mFilePart)); 
     try 
     { 
      entity.addPart(STRING_PART_NAME, new StringBody(mStringPart)); 
     } 
     catch (UnsupportedEncodingException e) 
     { 
      VolleyLog.e("UnsupportedEncodingException"); 
     } 
    } 

    @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); 
    } 
} 
संबंधित मुद्दे