Android okHttp addFormDataPart 为多个图像动态
Android okHttp addFormDataPart dynamically for Multiple Image
AndroidUploaders,您好,
我已经给出了答案但是我被多张图片上传卡住了。
我想一次动态上传 1 到 10 张图片。
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart(KEY_PHOTO_CAPTION, photoCaption)
.addFormDataPart(KEY_FILE, "profile.png", RequestBody.create(MEDIA_TYPE_PNG, sourceFile))
.build();
我有 ArrayList
的 PhotoCaption class 其中有 captionPhoto
和 urlPhoto
所以我怎么能 addFormDataPart()
我正在考虑制作循环并多次调用此函数 ArrayList 大小。
有没有解决addFormDataPart()动态使用的方法?
此答案适用于 OkHttp2
对于OkHttp3你可以看到.
对于多图你只需要运行按你的要求循环,剩下的请求相关的部分和你做的一样。
// final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
final MediaType MEDIA_TYPE=MediaType.parse(AppConstant.arrImages.get(i).getMediaType());
//If you can have multiple file types, set it in ArrayList
MultipartBuilder buildernew = new MultipartBuilder().type(MultipartBuilder.FORM)
.addFormDataPart("title", title)
for (int i = 0; i < AppConstants.arrImages.size(); i++) {
File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
TEMP_FILE_NAME + i + ".png");
if (f.exists()) {
buildernew.addFormDataPart(TEMP_FILE_NAME + i, TEMP_FILE_NAME + i + FILE_EXTENSION, RequestBody.create(MEDIA_TYPE, f));
}
}
RequestBody requestBody = buildernew.build();
Request request = new Request.Builder()
.url(Url.URL + Url.INSERT_NEWS)
.post(requestBody)
.build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
return response.body().string();
不要忘记删除 温度。您上传的文件如果没有用。
这里我创建了上传多张图片的功能
/**
* Here I am uploading MultipleImages from List of photoCaption
* Sending photoCaption with URL and Caption of Photo...
*
* @param albumId
* @param photoCaptions
* @return
*/
public static JSONObject uploadAlbumImage(String albumId, ArrayList<PhotoCaption> photoCaptions) {
try {
MultipartBuilder multipartBuilder = new MultipartBuilder().type(MultipartBuilder.FORM);
int length = photoCaptions.size();
int noOfImageToSend = 0;
for(int i = 0; i < length; i++) {
/**
* Getting Photo Caption and URL
*/
PhotoCaption photoCaptionObj = photoCaptions.get(i);
String photoUrl = photoCaptionObj.getPhotoUrl();
String photoCaption = photoCaptionObj.getPhotoCaption();
File sourceFile = new File(photoUrl);
if(sourceFile.exists()) {
/** Changing Media Type whether JPEG or PNG **/
final MediaType MEDIA_TYPE = MediaType.parse(FileUtils.getExtension(photoUrl).endsWith("png") ? "image/png" : "image/jpeg");
/** Adding in MultipartBuilder **/
multipartBuilder.addFormDataPart(KEY_IMAGE_CAPTION + i, photoCaption);
multipartBuilder.addFormDataPart(KEY_IMAGE_NAME + i, sourceFile.getName(), RequestBody.create(MEDIA_TYPE, sourceFile));
/** Counting No Of Images **/
noOfImageToSend++;
}
}
RequestBody requestBody = multipartBuilder
.addFormDataPart(KEY_ALBUM_ID, albumId)
.addFormDataPart(KEY_IMAGE_COUNT, String.valueOf(noOfImageToSend))
.build();
Request request = new Request.Builder()
.url(URL_ALBUM_UPLOAD_IMAGE)
.post(requestBody)
.build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
/** Your Response **/
String responseStr = response.body().string();
Log.i(TAG, "responseStr : "+ responseStr);
return new JSONObject(responseStr);
} catch (UnknownHostException | UnsupportedEncodingException e) {
Log.e(TAG, "Error: " + e.getLocalizedMessage());
} catch (Exception e) {
Log.e(TAG, "Other Error: " + e.getLocalizedMessage());
}
return null;
}
希望对你有所帮助
AndroidUploaders,您好,
我已经给出了答案但是我被多张图片上传卡住了。
我想一次动态上传 1 到 10 张图片。
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart(KEY_PHOTO_CAPTION, photoCaption)
.addFormDataPart(KEY_FILE, "profile.png", RequestBody.create(MEDIA_TYPE_PNG, sourceFile))
.build();
我有 ArrayList
的 PhotoCaption class 其中有 captionPhoto
和 urlPhoto
所以我怎么能 addFormDataPart()
我正在考虑制作循环并多次调用此函数 ArrayList 大小。
有没有解决addFormDataPart()动态使用的方法?
此答案适用于 OkHttp2
对于OkHttp3你可以看到
对于多图你只需要运行按你的要求循环,剩下的请求相关的部分和你做的一样。
// final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
final MediaType MEDIA_TYPE=MediaType.parse(AppConstant.arrImages.get(i).getMediaType());
//If you can have multiple file types, set it in ArrayList
MultipartBuilder buildernew = new MultipartBuilder().type(MultipartBuilder.FORM)
.addFormDataPart("title", title)
for (int i = 0; i < AppConstants.arrImages.size(); i++) {
File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
TEMP_FILE_NAME + i + ".png");
if (f.exists()) {
buildernew.addFormDataPart(TEMP_FILE_NAME + i, TEMP_FILE_NAME + i + FILE_EXTENSION, RequestBody.create(MEDIA_TYPE, f));
}
}
RequestBody requestBody = buildernew.build();
Request request = new Request.Builder()
.url(Url.URL + Url.INSERT_NEWS)
.post(requestBody)
.build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
return response.body().string();
不要忘记删除 温度。您上传的文件如果没有用。
这里我创建了上传多张图片的功能
/**
* Here I am uploading MultipleImages from List of photoCaption
* Sending photoCaption with URL and Caption of Photo...
*
* @param albumId
* @param photoCaptions
* @return
*/
public static JSONObject uploadAlbumImage(String albumId, ArrayList<PhotoCaption> photoCaptions) {
try {
MultipartBuilder multipartBuilder = new MultipartBuilder().type(MultipartBuilder.FORM);
int length = photoCaptions.size();
int noOfImageToSend = 0;
for(int i = 0; i < length; i++) {
/**
* Getting Photo Caption and URL
*/
PhotoCaption photoCaptionObj = photoCaptions.get(i);
String photoUrl = photoCaptionObj.getPhotoUrl();
String photoCaption = photoCaptionObj.getPhotoCaption();
File sourceFile = new File(photoUrl);
if(sourceFile.exists()) {
/** Changing Media Type whether JPEG or PNG **/
final MediaType MEDIA_TYPE = MediaType.parse(FileUtils.getExtension(photoUrl).endsWith("png") ? "image/png" : "image/jpeg");
/** Adding in MultipartBuilder **/
multipartBuilder.addFormDataPart(KEY_IMAGE_CAPTION + i, photoCaption);
multipartBuilder.addFormDataPart(KEY_IMAGE_NAME + i, sourceFile.getName(), RequestBody.create(MEDIA_TYPE, sourceFile));
/** Counting No Of Images **/
noOfImageToSend++;
}
}
RequestBody requestBody = multipartBuilder
.addFormDataPart(KEY_ALBUM_ID, albumId)
.addFormDataPart(KEY_IMAGE_COUNT, String.valueOf(noOfImageToSend))
.build();
Request request = new Request.Builder()
.url(URL_ALBUM_UPLOAD_IMAGE)
.post(requestBody)
.build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
/** Your Response **/
String responseStr = response.body().string();
Log.i(TAG, "responseStr : "+ responseStr);
return new JSONObject(responseStr);
} catch (UnknownHostException | UnsupportedEncodingException e) {
Log.e(TAG, "Error: " + e.getLocalizedMessage());
} catch (Exception e) {
Log.e(TAG, "Other Error: " + e.getLocalizedMessage());
}
return null;
}
希望对你有所帮助