【问题标题】:JSF 2 download file with cyrillic name带有西里尔名称的 JSF 2 下载文件
【发布时间】:2013-05-24 12:11:39
【问题描述】:

我有一个包含文件的数据表和用于下载所选文件的按钮。

如果文件名带有西里尔符号,浏览器会显示“未知文件类型” 例子: 我有文件“асдасд.png”,我点击下载 浏览器响应

有我的下载方法

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,但我不知道如何... 请帮忙。

【问题讨论】:

    标签: java file jsf-2 download


    【解决方案1】:

    使用URLEncoder

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

    请注意,这已经由 OmniFaces Faces#sendFile() 隐式完成。因此,如果您碰巧已经使用过 OmniFaces,那么您可以直接使用它。

    “未知文件类型”部分是由使用不受支持的内容类型引起的。您应该使用正确的内容类型,即 image/png 用于 PNG 文件。您可以使用ExternalContext#getMimeType() 根据文件名获取正确的内容类型。这也已经由Faces#sendFile() 隐式完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2021-06-09
      • 1970-01-01
      • 2016-06-14
      相关资源
      最近更新 更多