【发布时间】:2019-11-17 22:22:18
【问题描述】:
我正在尝试在我的 java servlet 中提供二进制响应。首先,我从数据库中获取请求的数据,然后尝试将其设置为这样的响应:
ResultSet rset = (ResultSet) stmt.executeQuery();
if (rset.next())
{
byte[] bData = rset.getBytes("Soubor");
String sJmenoSouboru = rset.getString("Jmeno_souboru");
response.setHeader("Content-Disposition","attachment;filename=" + sJmenoSouboru);
//response.setHeader("Content-Description", sJmenoSouboru);
response.setHeader("Content-Transfer-Encoding", "binary");
//response.setContentType("application/pdf");
response.setContentType("application/octet-stream");
ServletOutputStream hOutStream = response.getOutputStream();
hOutStream.write(bData);
hOutStream.flush();
hOutStream.close();
}
这可以正常工作,直到文件名中有“§”字符。比我得到 ERR_SPDY_PROTOCOL_ERROR。据我所知,提到的字符应该可以在文件名中使用。有谁知道,问题可能出在哪里?
【问题讨论】:
-
您是否在其他浏览器中尝试过? Avast 不是在您的计算机上运行吗?见support.google.com/chrome/forum/AAAAP1KN0B0sfAqeo4hDy8/…
-
postgreSQL 数据库不支持方法 getNString,我试过了,我得到了 MethodNotSupported 异常。
-
我用 firefox 和 chrome 试过了,结果是一样的。 Avast 的优点是,我正在使用它,但在这种情况下,我尝试禁用主屏蔽,而浏览器行为没有变化。
-
看看this post。简而言之,您使用的是非 ASCII 字符的文件名。
标签: java servlets binary response