8

現在、jQuery-File-Uploadを使用しています。日本語または中国語のファイル名でいくつかのファイルをアップロードする場合がありますが、ファイル名は、ブラウザのデバッグモードでは「お疲れ様Des.txt」または「測定试文档.txt」ですが、バックエンド(Java)であることがわかります。 、それらは「ã�Šç–²ã‚Œæ§˜ã�§ã�™.txt」および「æµ ‹è¯•æ–‡æ¡£.txt」になります。formAcceptCharsetUTF-8
に設定しようとしましたが、機能しません。 質問: MultipartFormDataを解析するときにJava側で正しいファイル名を取得するにはどうすればよいですか?

前もって感謝します。

ところで、以下は私のデータです

-----------------------------25382434931419
Content-Disposition: form-data; name="file"; filename="�疲れ様��.txt"
Content-Type: text/plain
....

Javaコードを追加する
実際、私は現在Java側では何もしていません。

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public String upload(InMultiPart inMP) {
    while (inMP.hasNext()) {
        InPart part = inMP.next();
        MultivaluedMap<String, String> headers = part.getHeaders();
        String fileName = null;
        if (!headers.containsKey("Content-Disposition")) {
            continue;
        } else {
            // get the file name here
            fileName = parseFileName(headers.getFirst("Content-Disposition"));
        }
        //.....
    }
    //......
}

private String parseFileName(String disposition) {
    int fileNameIndex = disposition.indexOf("filename=");
    if (fileNameIndex < 0) {
        return null;
    }
    int start = disposition.indexOf("\"", fileNameIndex) + 1;
    int end = disposition.indexOf("\"", start);
    return  disposition.substring(start, end);
}
4

1 に答える 1

1

Stephen Cが言ったように、フィルターを使用して正しいエンコーディングを取得できます。この問題は JBOSS 7.1.1 で発生し、フィルターを実装しました。

ウェブ xml 内

<filter>
    <display-name>set character encoding</display-name>
    <filter-name>RequestEncodingFilter</filter-name>
    <filter-class>com.myapp.RequestEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>RequestEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

フィルタ クラス:

public class RequestEncodingFilter implements Filter {

private static final String ENCODING = "encoding";
private String configuredEncoding;

@Override
public void init(FilterConfig filterConfig) throws ServletException {
    configuredEncoding = filterConfig.getInitParameter(ENCODING);
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    servletRequest.setCharacterEncoding(configuredEncoding);
    filterChain.doFilter(servletRequest, servletResponse);
}

@Override
public void destroy() {
}

}

于 2013-05-27T14:17:08.153 に答える