0

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

ブラウザはアップロードする前にファイル名をエンコードしていると思いますが、どのエンコードを使用したのか、またはデコードして戻す方法がわかりません。どんな助けでも大歓迎です。

4

0 に答える 0