gpt4 book ai didi

java - JSF 2 下载具有西里尔文名称的文件

转载 作者:搜寻专家 更新时间:2023-11-01 01:53:51 26 4
gpt4 key购买 nike

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

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

有我的下载方法

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

最佳答案

使用URLEncoder

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

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

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

关于java - JSF 2 下载具有西里尔文名称的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16734673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com