如何使用 Koush / Ion 正确发送多个文件和参数
How to correctly send multiple files and params with Koush / Ion
我正在使用 Koush / Ion 库。
我正在尝试发送带有常规参数和文件的请求,例如 html 多部分表单,但似乎没有发送任何内容。这是正确的方法吗?还是我做的有点奇怪?
当请求与文件一起发送时,运行 回调需要更多时间,所以我认为这是在发送文件,但方式不正确:/
请原谅我的语言,希望我解释得很好。
$_POST
、$_GET
和 $_FILES
的 print_r
总是 returns 空数组。
Builders.Any.B builder = Ion.with(context).load(http_verb, route).setLogging(TAG, Log.ERROR);
Log.d(TAG, parameters.size() + " parameters and " + files.size() + " files");
List<Part> parts = new ArrayList();
for (int i = 0; i < files.size(); i++) {
Log.d(TAG, "File " + i + ": " + files.get(i).getName());
parts.add(new FilePart("file_" + i, files.get(i)));
}
for(ApiParameter parameter : parameters) {
Log.d(TAG, "Parameter: " + parameter.key + " = " + parameter.value);
parts.add(new StringPart(parameter.key, parameter.value));
}
builder.addMultipartParts(parts);
builder.asString().setCallback(callback);
Android 日志这样说(裁剪):
D/API: Request: PUT: http://api.<replaced>
D/API: 11 parameters and 1 files
D/API: File 0: f83ee728-8b1b-4cbf-8f6c-c103456366c4
D/API: Parameter: token = d81db04cc03faa16717a61eb494969b16e134b38
D/API: Parameter: id_google_place = EiJDYXJyZXIgQmFydHJpbmEsIFRlcnJhc3
终于找到问题了:
我不能在 PUT 中 post 文件(只有 post),我用这个解决了这个问题:
if(http_verb.toUpperCase().equals("POST")){
for (ApiParameter parameter : parameters) {
Log.d(TAG, "Parameter: " + parameter.key + " = " + parameter.value);
builder.setMultipartParameter(parameter.key, parameter.value);
}
for (int i = 0; i < files.size(); i++) {
Log.d(TAG, "File " + i + ": " + files.get(i).getName());
builder.setMultipartFile("file_" + i, files.get(i));
}
}else{
for(ApiParameter parameter : parameters) {
Log.d(TAG, "Parameter" + parameter.key + " = " + parameter.value);
builder.setBodyParameter(parameter.key, parameter.value);
}
}
我正在使用 Koush / Ion 库。
我正在尝试发送带有常规参数和文件的请求,例如 html 多部分表单,但似乎没有发送任何内容。这是正确的方法吗?还是我做的有点奇怪?
当请求与文件一起发送时,运行 回调需要更多时间,所以我认为这是在发送文件,但方式不正确:/
请原谅我的语言,希望我解释得很好。
$_POST
、$_GET
和 $_FILES
的 print_r
总是 returns 空数组。
Builders.Any.B builder = Ion.with(context).load(http_verb, route).setLogging(TAG, Log.ERROR);
Log.d(TAG, parameters.size() + " parameters and " + files.size() + " files");
List<Part> parts = new ArrayList();
for (int i = 0; i < files.size(); i++) {
Log.d(TAG, "File " + i + ": " + files.get(i).getName());
parts.add(new FilePart("file_" + i, files.get(i)));
}
for(ApiParameter parameter : parameters) {
Log.d(TAG, "Parameter: " + parameter.key + " = " + parameter.value);
parts.add(new StringPart(parameter.key, parameter.value));
}
builder.addMultipartParts(parts);
builder.asString().setCallback(callback);
Android 日志这样说(裁剪):
D/API: Request: PUT: http://api.<replaced>
D/API: 11 parameters and 1 files
D/API: File 0: f83ee728-8b1b-4cbf-8f6c-c103456366c4
D/API: Parameter: token = d81db04cc03faa16717a61eb494969b16e134b38
D/API: Parameter: id_google_place = EiJDYXJyZXIgQmFydHJpbmEsIFRlcnJhc3
终于找到问题了:
我不能在 PUT 中 post 文件(只有 post),我用这个解决了这个问题:
if(http_verb.toUpperCase().equals("POST")){
for (ApiParameter parameter : parameters) {
Log.d(TAG, "Parameter: " + parameter.key + " = " + parameter.value);
builder.setMultipartParameter(parameter.key, parameter.value);
}
for (int i = 0; i < files.size(); i++) {
Log.d(TAG, "File " + i + ": " + files.get(i).getName());
builder.setMultipartFile("file_" + i, files.get(i));
}
}else{
for(ApiParameter parameter : parameters) {
Log.d(TAG, "Parameter" + parameter.key + " = " + parameter.value);
builder.setBodyParameter(parameter.key, parameter.value);
}
}