Браузер Android Chrome без необходимости переименовывает имена и типы загруженных файлов

Я решил опубликовать это, так как у меня есть более подробная информация:

ПРОБЛЕМА: Браузер Android Chrome во всех случаях переименовывает файл в «Скачать». В некоторых случаях он переименовывает тип в «.bin» (например, если расширение .MOV). Как я уже упоминал ранее, браузерные приложения Firefox и Dolphin на одном устройстве Android не демонстрируют такого поведения. Файлы скачиваются корректно. В качестве примечания я уже пытался указать атрибут «Загрузить» в элементе Anchor, но безуспешно. В этом случае атрибут «Загрузить» игнорируется даже браузером Android Chrome. Я предполагаю, что из-за способа потоковой передачи файла атрибут «загрузка» игнорируется. Следует также отметить, что настольная версия браузера Chrome загружает файлы без проблем (без переименования). Я думаю, что в браузере Chrome есть встроенная функция безопасности, которая вызывает эти проблемы с переименованием.

СПРАВОЧНАЯ ИНФОРМАЦИЯ: веб-сервер IIS 7.5 в облаке Windows Azure. Используемое веб-приложение — это платформа Microsoft MVC для маршрутизации. Таким образом, когда файл выбирается для загрузки из браузера Chrome на устройстве Android, доступ к методу загрузки на сервере осуществляется с использованием маршрутизации MS MVC. В этом методе мы указываем информацию о заголовке и передаем нарезанные фрагменты файла с помощью httpResponse. Это прекрасно работает для любого другого браузерного приложения на устройстве Android (например, Firefox и Dolphin) и может сохраняться с правильным именем и типом файла. Однако в Chrome файл и тип (иногда) переименовываются.

Вот заголовки ответа, когда я загружаю файл .MOV:

*HTTP/1.1 200 OK Cache-Control: private, s-maxage=0 Content-Length: 54295903 Content-Type: application/octet-stream Server: Microsoft-IIS/7.5 X-AspNetMvc-Version: 4.0 Content-Disposition: вложение; имя_файла=UTF-8''MyVideo.MOV X-AspNet-Версия: 4.0.30319 X-Powered-By: ASP.NET Дата: сб, 29 июня 2013 г., 05:01:32 по Гринвичу**

ПОМОЩЬ!: Буду признателен за любые советы по обходному пути. Кроме того, я был бы признателен за определенное слово от кого-то, кто работает в сообществе разработчиков Google, относительно того, будет ли это исправлено в следующем обновлении. Спасибо!!


person TheDude    schedule 28.06.2013    source источник
comment
Можете ли вы опубликовать ссылку, которая позволила бы нам самим увидеть поведение и посмотреть, есть ли что-нибудь примечательное в заголовках ответов, что могло бы объяснить это?   -  person CommonsWare    schedule 29.06.2013
comment
Я захватил заголовки ответа, используя инструменты разработчика Chrome. Вот он: HTTP/1.1 200 OK Cache-Control: private, s-maxage=0 Content-Length: 54295903 Content-Type: application/octet-stream Server: Microsoft-IIS/7.5 X-AspNetMvc-Version: 4.0 Content- Характер: привязанность; имя_файла*=UTF-8''MyVideo.MOV X-AspNet-Версия: 4.0.30319 X-Powered-By: ASP.NET Дата: 29 июня 2013 г., 05:01:32 по Гринвичу   -  person TheDude    schedule 29.06.2013
comment
Может ли это быть как-то связано с добавлением UTF-8 к имени файла? Это не влияет на браузер Chrome на рабочем столе, но это может повлиять на браузер Android Chrome? Что вы думаете?   -  person TheDude    schedule 29.06.2013
comment
Извините, моя ошибка, кто-то задал тот же вопрос на днях, он исправлен в бета-версии, вам нужно подождать, пока она не станет стандартной версией Chrome.   -  person Kinlan    schedule 01.07.2013
comment
Хорошо, кто-то удалил вопрос.   -  person Kinlan    schedule 01.07.2013
comment
stackoverflow.com/questions/17239264/ - это ответ на аналогичный вопрос.   -  person Kinlan    schedule 01.07.2013
comment
О, это был ты, я ответил на него в прямом эфире - youtube.com/   -  person Kinlan    schedule 01.07.2013


Ответы (3)


Content-Disposition имеет историю проблем на Android. Вы, безусловно, можете попробовать удалить часть UTF-8 и посмотреть, поможет ли это Chrome. Но обязательно протестируйте оригинальное приложение Android Browser, так как в числовом отношении это самый популярный браузер для Android.

Смотрите также:

person CommonsWare    schedule 29.06.2013
comment
Спасибо. Очень полезно. Я попробую изменить Content-Disposition. Следует также отметить, что Content-Disposition имеет значение: filename*=UTF-8MyVideo.MOV В примерах, которые я видел, знак * перед = в моем случае кажется неуместным. Как вы думаете, это может сбить с толку браузер Android Chrome? - person TheDude; 30.06.2013

У меня была похожая проблема с загрузками в Chrome/Android. Файлы .docx были переименованы в filename.bin (или что-то в этом роде).

Заголовки включены

Content-Type:application/octet-stream

и

Content-Disposition:attachment; filename="something.docx";

Оказалось, что моя проблема заключалась в конце точки с запятой в заголовке «Content-Disposition». Когда в конце строки нет точки с запятой - работает нормально:

Content-Disposition:attachment; filename="something.docx"

Дополнительная информация здесь: http://www.digiblog.de/2011/04/android-and-the-download-file-headers/

Так что обязательно проверьте и это.

person Anton Laptashev    schedule 17.10.2013

Это дубликат предыдущего вопроса, на который мы ответили в прямом эфире и на SO здесь https://stackoverflow.com/questions/17266320/chrome-browser-in-android-always-renames-downloaded-file-to-download-bin, который был удален.

Это будет исправлено в следующем обновлении, особенно через атрибут [download].

person Kinlan    schedule 01.07.2013
comment
Привет, Кинлан, я ценю твою попытку помочь мне и приношу свои извинения за то, что не предоставил больше подробностей. Оказывается, у браузера Android Chrome есть проблема с кодировкой UTF-8 в имени файла. В нашем коде мы кодируем имя файла в кодировке UTF-8 для обработки символов, отличных от ascii. Но браузер Android Chrome, кажется, задыхается от этого, поскольку он загружается правильно, когда я вынимаю часть UTF-8. - person TheDude; 01.07.2013
comment
Спецификация для расположения вообще не упоминает о том, что UTF-8 действителен, поэтому я думаю, что его следует удалить в соответствии с ответом выше. - person Kinlan; 04.07.2013
comment
Итак, как Android Chrome будет обрабатывать символы, отличные от ascii, в именах файлов в будущем? Настольный браузер Chrome может обрабатывать кодировку utf-8 имени файла в content-disposition, кстати. - person TheDude; 05.07.2013
comment
Я начинаю задаваться вопросом, отличается ли поведение браузера Android Chrome от настольной версии и не требуется ли кодировка UTF-8. Мне придется проверить имена файлов с символами, отличными от ascii, в браузере Android Chrome. Я дам вам знать, ребята... - person TheDude; 05.07.2013
comment
В ПОРЯДКЕ. Похоже, мне удалось успешно загрузить файл с корейскими иероглифами с помощью Android Chrome. Мне не нужно было кодировать его с помощью UTF-8. - person TheDude; 05.07.2013