二进制内容响应 - 文件名无效?
Binary content response - invalid file name?
我正在尝试在我的 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。据我所知,提到的字符应该可以用在文件名中。有谁知道,问题出在哪里?
正如评论中提到的stdunbar,问题是'§'是一个non-ASCII字符,需要在文件名中进行转义。我通过更改这行代码解决了它:
String sJmenoSouboru = URLEncoder.encode(rset.getString("Jmeno_souboru"), StandardCharsets.UTF_8.toString());
我正在尝试在我的 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。据我所知,提到的字符应该可以用在文件名中。有谁知道,问题出在哪里?
正如评论中提到的stdunbar,问题是'§'是一个non-ASCII字符,需要在文件名中进行转义。我通过更改这行代码解决了它:
String sJmenoSouboru = URLEncoder.encode(rset.getString("Jmeno_souboru"), StandardCharsets.UTF_8.toString());