Ответ двоичного содержимого - неверное имя файла? - PullRequest
2 голосов
/ 08 июля 2019

Я пытаюсь отправить двоичный ответ в моем Java-сервлете. Сначала я получаю запрошенные данные из базы данных, а затем пытаюсь установить их как ответ:

    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. Упомянутый символ должен использоваться в именах файлов, насколько я знаю. Кто-нибудь знает, где может быть проблема?

1 Ответ

0 голосов
/ 09 июля 2019

Как указано в комментариях stdunbar , проблема в том, что '§' не является символом ASCII и его необходимо экранировать в имени файла. Я решил это, изменив эту строку кода:

String sJmenoSouboru = URLEncoder.encode(rset.getString("Jmeno_souboru"), StandardCharsets.UTF_8.toString());
...