我想使用multipart通过volley上传图片,并且还想在图片上传期间显示进度对话框。
上传图片时我使用this code for show progress dialog,check 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();
}
}
由于
答案 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