gpt4 book ai didi

spring - 下载文本/html文件时如何防止servlet响应编码? Spring +JSF

转载 作者:行者123 更新时间:2023-11-28 23:47:21 26 4
gpt4 key购买 nike

我使用 tomcat 5.5、JSF 1.2、Spring 3

我有将文件从磁盘传递到浏览器的 servlet。当该文件具有 text/html mime 类型 时会出现问题。

我不知道该文件可能有什么编码,所以我无法设置正确的响应编码。

这是servlet的代码

    private void handleFILERequest(final FacesContext context) throws UnsupportedEncodingException {
String filePath = AbstractBean.getStrRequestScopeAttribute(FILE_PATH);
String mimeType = AbstractBean.getStrRequestScopeAttribute(FILE_MIME_TYPE);
String fileName = AbstractBean.getStrRequestScopeAttribute(FILE_NAME);
byte[] data = getFile(filePath);

HttpServletResponse response = AbstractBean.getResponse();
response.reset();
response.setContentType(mimeType);
response.setContentLength(data.length);
if (fileName == null || "".equals(fileName)) {
response.addHeader("Content-Disposition", "attachment; filename=\"downloadFile\"");
} else {
response.addHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\"");
}
try {
response.getOutputStream().write(data);
} catch (Exception exception) {
LOG.error(exception.getMessage());
}
context.responseComplete();
}


private byte[] getFile(final String path) {
return IOUtils.readFile(path);
}

只有当文件的mime 类型text/html 时才会出现该问题。在我将字节流传递给响应 outputstream 后,该字节流以某种方式被重新编码。此外,html 标记也略有变化,如下所示。我认为 servlet 容器可以做到这一点,但我不确定。

有没有办法检测文件编码以将其设置为响应编码或至少防止响应流的进一步重新编码?

至少我想知道是谁修改了那个字节流,tomcat,spring,jsf还是...?

这是磁盘上的一部分文件和在浏览器中生成的下载文件:

磁盘上的文件(西里尔符号,但未定义编码):

<html>
<head>
<link HREF="/vestnik/csstyles/article.css" REL="stylesheet">
<title>Л.О. Бутакова. Опыт классификации ошибок ...</title>
</head>
...

我在浏览器中获取的文件:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link HREF="/vestnik/csstyles/article.css" REL="stylesheet">
<title>пїЅ.пїЅ. пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ. пїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ ...</title>
</head>
...

提前致谢。

最佳答案

可以使用UTF-8编码

String str = new String(data); //set your data in this object
response.setContentType("text/plain");
InputStream input = new ByteArrayInputStream(str.getBytes("UTF8"));

关于spring - 下载文本/html文件时如何防止servlet响应编码? Spring +JSF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12691307/

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