Open 1141704427 opened 5 years ago
我也遇到这个问题,怎么解决呢?有谁解了吗?
像我这样的大好人,果断上传解决方案
在HttpUtils 中替换如下代码,
/* 生成类似表单的请求体 /
public static RequestBody generateMultipartRequestBody(HttpParams params, boolean isMultipart) {
if (params.fileParamsMap.isEmpty() && !isMultipart) {
//表单提交,没有文件
FormBody.Builder bodyBuilder = new FormBody.Builder();
for (String key : params.urlParamsMap.keySet()) {
List urlValues = params.urlParamsMap.get(key);
for (String value : urlValues) {
bodyBuilder.add(key, value);
}
}
return bodyBuilder.build();
} else {
//表单提交,有文件
MultipartBody.Builder multipartBodybuilder = new MultipartBody.Builder().setType(MultipartBody.FORM);
//拼接键值对
if (!params.urlParamsMap.isEmpty()) {
for (Map.Entry<String, List> entry : params.urlParamsMap.entrySet()) {
List urlValues = entry.getValue();
for (String value : urlValues) {
multipartBodybuilder.addFormDataPart(entry.getKey(), value);
}
}
}
//拼接文件
for (Map.Entry<String, List
解释: addFormDataPart(key,filename,filebody) 中 filename 需要encode
@1141704427 @Howard-mo
上传的文件带有中文名称,被okhttp3 库里面的 okhttp3.Headers.java 类中的checkNameAndValue方法抛出异常,okgo是否有处理中文编码的方法 java.lang.IllegalArgumentException: Unexpected char 0x7f8e at 35 in Content-Disposition value: form-data; name="files";filename="测试-(117)_&_9993a332-8842-400e-a380-24a6eb01da88.jpg"