В настоящее время я столкнулся со следующей проблемой:
- Человек заходит на страница со стандартным аудиотегом HTML5 и прямой ссылкой на аудиофайл для загрузки.
- Человек пытается прослушать аудио с помощью аудиотега, контент воспроизводится в течение x минут, обрезается, а затем повторяется (количество x минут НЕ является продолжительностью записи и не является
- Человек пробует прямую ссылку на запись, а не загружает запись, Safari, похоже, переходит на новую страницу и оборачивает URL-адрес загрузки в элемент видео, и та же проблема, что и происходит шаг 2.
Код: Выделить всё
String fn = saveTo + file_name;
f = new File(fn);
String fname = f.getName();
String contentType = "audio/wav";
if(fname.endsWith("mp3")){
contentType = "audio/mp3";
}
response.setContentType(contentType);
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Content-disposition", "attachment;filename="+f.getName());
response.setHeader("Content-Length", ""+f.length());
FileInputStream fin = null;
try{
fin = new FileInputStream(f.getCanonicalFile());
byte[] data = new byte[1024];
int x = 0;
while((x = fin.read(data, 0, 1024))>=0){
response.getOutputStream().write(data, 0, x);
Thread.sleep(1);
}
} finally {
if(fin != null) {
try{
fin.close();
}catch(Exception ex){}
}
}
Я обнаружил, что при отладке на iPhone в режиме отладки на Mac код возврата не отображается. Он не показывает заголовков ответов, но очевидно, что он что-то получает. Кажется, журнал сервера считает, что он возвращает статус 200, это отображается в Chrome и Firefox.
Похоже, что приведенный выше код отлично работает с Chrome и Firefox, но не с Safari. .
Единственное, что я предполагаю, это как-то связано с тем, как файл передается в выходной поток, что не нравится Safari, или, может быть, он получает запутался и должен иметь другой код состояния. Я ломаю голову над этим уже несколько дней и читаю как можно больше о Safari, хотя большая часть документации, которую я нахожу, посвящена «уникальной» реализации веб-аудио и использованию один канал, который, похоже, не имеет к этому никакого отношения.
Будем благодарны за любую помощь.
Подробнее здесь: https://stackoverflow.com/questions/341 ... rom-server
Мобильная версия