【发布时间】:2016-04-20 23:22:55
【问题描述】:
我正在尝试使用 multipart/form-data 发送 POST。我遇到了一些问题,这些问题在这个论坛上得到了解决,比如额外的报价以及如何发送多个文件。但是现在,我想在一个数组中发送具有唯一名称的文件。我会附上两个文件来更好地表达我想做的事情。
我正在接收这样的文件...
我想收到这样的文件...
是否可以使用改造 2 更改正文数据结构?我想将 mimetype 数据从 multipart/form-data 更改为 image/jpeg。
一些代码
HashMap<String, RequestBody> files = attachFile();
api.createPlant(plant.getName(),
plant.getSize(), plant.getPhSoil(), plant.getEcSoil(), plant.getGardenId(), files)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Plant>() {
@Override
public final void onCompleted() {
Log.e(TAG, "on completed");
}
@Override
public final void onError(Throwable e) {
Log.e(TAG, e.getMessage());
}
@Override
public final void onNext(Plant response) {
mBody.setText(response.toString());
}
});
private HashMap<String, RequestBody> attachFile() {
ArrayList<String> listOfNames = new ArrayList<>();
listOfNames.add("images");
listOfNames.add("mango-lg2");
HashMap<String, RequestBody> map = new HashMap<>(listOfNames.size());
RequestBody file = null;
File f = null;
for(int i = 0, size = listOfNames.size(); i<size;i++){
try {
File folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
f = new File(folder, listOfNames.get(i) + ".jpg");
Bitmap bitmap = convertFileToBitmap(f);
if(bitmap != null){
FileOutputStream fos = new FileOutputStream(f);
bitmap.compress(Bitmap.CompressFormat.JPEG, 0 /*ignored for PNG*/, fos);
fos.flush();
fos.close();
}else{
Log.i("INFO", "imageNotFound");
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
file = RequestBody.create(MediaType.parse("multipart/form-data"), f);
map.put("file\"; filename=\"" + listOfNames.get(i) + ".jpg",file);
file = null;
f = null;
}
return map;
}
【问题讨论】: