使用齐射和水平进度条发送多部分图像

时间:2014-07-15 07:48:35

标签: android file-upload android-progressbar multipart android-volley

我想使用multipart通过volley上传图片,并且还想在图片上传期间显示进度对话框。

上传图片时我使用this code for show progress dialogcheck this code for this.

并使用以下代码进行上传。

public void doFileUpload(ArrayList<MyUploadImage> images){
        try {
            //MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
            //entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

            JSONObject jo = new JSONObject();
            jo.put("NoOfImages", images.size());

            HttpClient client = new DefaultHttpClient();
            HttpPost post = new HttpPost(link);

            CustomMultiPartEntity multipartContent = new CustomMultiPartEntity(new ProgressListener()
            {
                @Override
                public void transferred(long num)
                {
                    pd.setProgress((int) ((num / (float) totalSize) * 100));
                }
            });

            //MultipartEntity reqEntity = new MultipartEntity();
            int size = images.size();
            for(int i = 0; i < size; i++){
                FileBody bin1 = new FileBody(images.get(i).getImageFile());

                multipartContent.addPart(("uploaded_file"+i), bin1);
            }

            multipartContent.addPart("girish", new StringBody(jo.toString()));
            totalSize = multipartContent.getContentLength();

            post.setEntity(multipartContent);
            HttpResponse response = client.execute(post);

            HttpEntity resEntity = response.getEntity();

            final String response_str = EntityUtils.toString(resEntity);

            Log.e("Response", response_str);

            pd.dismiss();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
            pd.dismiss();
        } catch (Exception e) {
            e.printStackTrace();
            pd.dismiss();
        }

    }

由于

1 个答案:

答案 0 :(得分:0)

Volley不为Multipart提供支持。但你仍然可以使用凌空的框架并为你提供 像我们用于SSL连接一样拥有HttpStack的实现。

public class MultiPartRequest extends JsonRequest<JSONObject> {

    /* To hold the parameter name and the File to upload */
    private Map<String,File> fileUploads = new HashMap<String,File>();

    /* To hold the parameter name and the string content to upload */
    private Map<String,String> stringUploads = new HashMap<String,String>();

    public void addFileUpload(String param,File file) {
        fileUploads.put(param,file);
    }

    public void addStringUpload(String param,String content) {
        stringUploads.put(param,content);
    }

    public Map<String,File> getFileUploads() {
        return fileUploads;
    }

    public Map<String,String> getStringUploads() {
        return stringUploads;
    }
}

在您的HttpStack实现中,创建MultiPartEntity并将其设置为HttpRequest。有关详细信息,请参阅SslHttpStack createHttpRequest方法。

private static void setMultiPartBody(HttpEntityEnclosingRequestBase httpRequest, Request<?> request) throws AuthFailureError {

    // Return if Request is not MultiPartRequest
    if(request instanceof MultiPartRequest == false) {
        return;
    }

    MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);  
    //Iterate the fileUploads
    Map<String,File> fileUpload = ((MultiPartRequest)request).getFileUploads();

    for (Map.Entry<String, File> entry : fileUpload.entrySet()) {
        multipartEntity.addPart(((String)entry.getKey()), new FileBody((File)entry.getValue()));
    }

    //Iterate the stringUploads
    Map<String,String> stringUpload = ((MultiPartRequest)request).getStringUploads();

    for (Map.Entry<String, String> entry : stringUpload.entrySet()) {
        try {
            multipartEntity.addPart(((String)entry.getKey()), new StringBody((String)entry.getValue()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    httpRequest.setEntity(multipartEntity);
}

请在此处查看此解决方案:https://github.com/smanikandan14/Volley-demo