Браузер обрабатывает реальный файл иначе, чем файл, созданный сервлетом - PullRequest
0 голосов
/ 24 января 2010

У меня есть приложение, которое использует html5, чтобы позволить пользователю прослушивать некоторые аудиосэмплы на сервере. Если я укажу путь к реальному аудиофайлу на сервере, все будет работать как положено:

<audio src="/audio/english/banana_1.mp3" controls>
    Your browser does not support the <code>audio</code> element.
</audio>

Однако, если я укажу на ресурс, который на самом деле является сервлетом, генерирующим аудиофайл, кажется, что звук не воспроизводится:

<audio src="/app/dbAudio" controls>
    Your browser does not support the <code>audio</code> element.
</audio>

Я подтвердил, что этот сервлет записывает необходимый аудиофайл; Я скачал и воспроизвел его напрямую. Я также установил ответ contentType в аудио / mpeg и аудио / x-mpeg, но без кубиков. Есть ли какой-то другой заголовок, который мне нужно установить, чтобы это работало? Спасибо за любую помощь.

  @RequestMapping(value = "/dbAudio", method = RequestMethod.GET)
  public void getAudioFromDB(HttpServletRequest request,
        HttpServletResponse response) throws Exception{

      response.setContentType("audio/mpeg");
      // Uncommenting the next allows me to download the resource directly and 
      // confirm that it is a well formed audio file
      // response.setHeader("Content-disposition", "attachment; filename=banana.mp3");

      OutputStream o = response.getOutputStream();

      Resource r = ctx.getResources("/audio/english/banana_1.mp3")[0];
      InputStream s = r.getInputStream();

      int chunk = 0;
      while(true){
          chunk = s.read();
          if(chunk == -1) break;
          o.write(chunk);
      }
      o.flush();         
  }

1 Ответ

1 голос
/ 24 января 2010

Попробуйте этот фрагмент .

...