OK httpで中国語のファイル名をアップロードする時に不合格の問題を確認します。
理由:okhttpにcheckNameの関数があるので、headerの値をチェックします。
解決策:スクリーンを追加して、反射機構を利用してファイルのヘッダの内容を修正して、自分が先に打つ必要な頭を探してからその対象の中に閉じ込めて、それから層ごとにセットして修正します。参考コードは以下の通りです。
解決策:スクリーンを追加して、反射機構を利用してファイルのヘッダの内容を修正して、自分が先に打つ必要な頭を探してからその対象の中に閉じ込めて、それから層ごとにセットして修正します。参考コードは以下の通りです。
client = new OkHttpClient.Builder()
.writeTimeout(30,TimeUnit.SECONDS)
.connectTimeout(30,TimeUnit.SECONDS)
.readTimeout(30,TimeUnit.SECONDS)
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
// , , MultipartBody
if(request.body() instanceof MultipartBody){
MultipartBody multipartBody = (MultipartBody) request.body();
try{
Field field = multipartBody.getClass().getDeclaredField("parts");
field.setAccessible(true);
List<MultipartBody.Part> object = (List<MultipartBody.Part>) field.get(multipartBody);
// part
MultipartBody.Part filenamePart = object.get(1);
String fileNameHeaders = GsonUtil.ObjectToJson(filenamePart.headers());
// header
int fileIndex = fileNameHeaders.indexOf("filename\\u003d\\\"");
int png = fileNameHeaders.indexOf(".pdf");//
if(fileIndex == -1 || png == -1){
//
Response response = chain.proceed(request);
return response;
}
String fileNameURLEncodeStr = fileNameHeaders.substring(fileIndex+"filename\\u003d\\\"".length(),png);
String fileNameURLDecodeStr = URLDecoder.decode(fileNameURLEncodeStr,"utf-8");
// System.out.println("fileNameURLEncodeStr:"+fileNameURLEncodeStr);
// System.out.println("fileNameURLDecodeStr:"+fileNameURLDecodeStr);
//
fileNameHeaders = fileNameHeaders.replace(fileNameURLEncodeStr,fileNameURLDecodeStr);
Headers filenamePartHeader = GsonUtil.JsonToObject(fileNameHeaders,
new TypeToken<Headers>(){
}.getType());
// filenamePart header
Field headerField = filenamePart.getClass().getDeclaredField("headers");
headerField.setAccessible(true);
headerField.set(filenamePart,filenamePartHeader);
// System.out.println(fileNameHeaders);
field.set(multipartBody,object);
}catch(Exception e){
// e.printStackTrace();
MyLog.info(" :"+e.toString());
}
}
Response response = chain.proceed(request);
return response;
}
})
.build();