Android 通过截击和水平进度条发送多部分图像
我想上传图像通过截击使用多部分,还想在图像上传过程中显示进度对话框 我在上传图像时使用,并且 并使用下面的代码进行上传Android 通过截击和水平进度条发送多部分图像,android,file-upload,android-progressbar,multipart,android-volley,Android,File Upload,Android Progressbar,Multipart,Android Volley,我想上传图像通过截击使用多部分,还想在图像上传过程中显示进度对话框 我在上传图像时使用,并且 并使用下面的代码进行上传 public void doFileUpload(ArrayList<MyUploadImage> images){ try { //MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); //entityBuild
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();
}
}
public void doFileUpload(ArrayList图像){
试一试{
//MultipartEntityBuilder entityBuilder=MultipartEntityBuilder.create();
//entityBuilder.setMode(与HttpMultipartMode.BROWSER_兼容);
JSONObject jo=新的JSONObject();
jo.put(“NoOfImages”,images.size());
HttpClient=new DefaultHttpClient();
HttpPost=新的HttpPost(链接);
CustomMultiPartEntity multipartContent=新CustomMultiPartEntity(new ProgressListener())
{
@凌驾
已转移的公共无效(长数值)
{
pd.setProgress((int)((num/(float)totalSize)*100));
}
});
//MultipartEntity reqEntity=新的MultipartEntity();
int size=images.size();
对于(int i=0;i
谢谢Volley不支持多部分。但您仍然可以使用volley的框架并为您提供 自己的HttpStack实现,就像我们用于SSL连接一样
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;
}
}
public类MultiPartRequest扩展了JsonRequest{
/*保存参数名称和要上载的文件*/
private Map fileUploads=新建HashMap();
/*保存要上载的参数名称和字符串内容*/
private Map stringUploads=新建HashMap();
public void addFileUpload(字符串参数,文件文件){
fileUploads.put(param,file);
}
public void addStringUpload(字符串参数、字符串内容){
stringUploads.put(参数,内容);
}
公共映射getFileUploads(){
返回文件上传;
}
公共映射getStringUploads(){
返回上传;
}
}
在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);
}
private static void setMultiPartBody(httpentityenclosuringrequestbase httpRequest,Request-Request)抛出AuthFailureError{
//如果请求不是MultiPartRequest,则返回
if(请求实例of MultiPartRequest==false){
返回;
}
MultipartEntity MultipartEntity=新的MultipartEntity(HttpMultipartMode.BROWSER_兼容);
//迭代文件上传
MapFileUpload=((MultiPartRequest)请求).getFileUploads();
对于(Map.Entry:fileUpload.entrySet()){
addPart(((String)entry.getKey()),新文件体((File)entry.getValue());
}
//迭代stringUploads
Map stringUpload=((MultiPartRequest)请求).getStringUploads();
对于(Map.Entry:stringUpload.entrySet()){
试一试{
addPart(((String)entry.getKey()),newstringbody((String)entry.getValue());
}捕获(例外e){
e、 printStackTrace();
}
}
httpRequest.setEntity(多协议实体);
}
请参见此处的解决方案: