4

選択したファイルをダウンロードするためのファイルとボタンを含むデータテーブルがあります。

ファイル名にキリル文字が含まれている場合、ブラウザには「不明なファイル タイプ」と表示されます。 ここに画像の説明を入力

私のダウンロード方法があります

public void download(Files file) {
    try {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        ExternalContext externalContext = facesContext.getExternalContext();
        externalContext.setResponseHeader("Content-Type", "application/x-download");
        externalContext.setResponseHeader("Content-Length", file.getFileContent().length+"");
        externalContext.setResponseHeader("Content-Disposition", "attachment;filename=\"" + file.getFilename() + "\"");
        externalContext.getResponseOutputStream().write(file.getFileContent());
        facesContext.responseComplete();
    } catch (IOException e1) {
        e1.printStackTrace();
    } catch (Exception e){
        e.printStackTrace();
    }
}

ファイル名をUTF-8にエンコードする必要があると確信していますが、方法がわかりません...助けてください。

4

1 に答える 1

7

を使用しURLEncoderます。

URLEncoder.encode(file.getFileName(), "UTF-8")

これはOmniFaces Faces#sendFile()によってすでに暗黙的に行われていることに注意してください。したがって、すでに OmniFaces を使用している場合は、それを直接利用できます。

「unknown file type」の部分は、サポートされていないコンテンツ タイプを使用したことが原因です。image/pngPNG ファイル用の適切なコンテンツ タイプを使用する必要があります。ExternalContext#getMimeType()ファイル名に基づいて適切なコンテンツ タイプを取得するために使用できます。これは、 によってすでに暗黙的に行われていFaces#sendFile()ます。

于 2013-05-24T12:50:07.703 に答える