ajaxとフォームデータを使用してファイルをサーバーにアップロードするJavaScriptコードと、それを受け入れるサーバー側のJavaコードがあります。英語のファイル名をアップロードできます。しかし、他の Unicode ファイル名をアップロードすると、サーバー側で取得したファイル名が読み取れません。以下はコード スニペットです。
JavaScript
var f = new FormData();
f.append("file", file);
xhr.send(f);
ジャワ
public void upload(MultipartFormDataInput input) {
Map<String, List<InputPart>> uploadForm = input.getFormDataMap();
List<InputPart> inputParts = uploadForm.get("user_file[]");
IFileInfo file = null;
for (InputPart inputPart : inputParts) {
try {
MultivaluedMap<String, String> header = inputPart.getHeaders();
fileName = getFileName(header);
System.out.println("File name is " + fileName);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private String getFileName(MultivaluedMap<String, String> header) {
System.out.println("Headers is " + header.getFirst("Content-Disposition"));
String[] contentDisposition = header.getFirst("Content-Disposition")
.split(";");
for (String filename : contentDisposition) {
if ((filename.trim().startsWith("filename"))) {
String[] name = filename.split("=");
String finalFileName = name[1].trim().replaceAll("\"", "");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return finalFileName;
}
}
return "unknown";
}
「大家好.jpg」をアップロードすると、以下のようなサーバー側のログが表示されました。
Headers is form-data; name="user_file[]"; filename="���������.jpg"
File name is ���������.jpg
ブラウザはアップロードする前にファイル名をエンコードしていると思いますが、どのエンコードを使用したのか、またはデコードして戻す方法がわかりません。どんな助けでも大歓迎です。