Chrome на Windows добавляет последние подчеркивания к загруженным файлам? - PullRequest
2 голосов
/ 25 марта 2019

У меня случается довольно странная ситуация: мне трудно отследить существующее приложение Django. Одно из представлений, которое наследуется от APIView, возвращается с файлом, когда пользователь выполняет вызов POST. Конечная точка работает нормально, но происходит нечто странное, когда загруженный файл достигает клиентского компьютера. К тому времени, когда браузер получает файл, расширение файла переименовывается с последующим подчеркиванием. (Итак, предположим, что файл изначально был «test.txt», версия, которую получит клиент, будет «test.txt_»).

Насколько я понимаю, непосредственно перед тем, как объект ответа возвращается в APIView, заголовки content-type и content-disposition выглядят корректно. E.g.:

Content-Type: application/octet-stream
Content-Disposition: attachment;filename="test.txt"

Этот же файл, когда он появляется в загрузках Chrome, называется "test.txt_" - с последним подчеркиванием. Я попробовал то же самое в Firefox, и, похоже, он загружается правильно. К сожалению, говорить большинству наших пользователей о переключении браузеров не удастся.

Я пробовал:

  • Принудительное использование другого типа контента (например, вместо «application / octet-stream», попробуйте «application / text», просто чтобы посмотреть, что происходит). Это не имело никакого эффекта.
  • Форматирование расположения содержимого немного отличается (например, пробел между точкой с запятой и именем файла). Это также не имело никакого эффекта.
  • Удалены двойные кавычки вокруг имени файла в заголовке размещения содержимого. Нет эффекта.
  • Удаление точек останова внутри самой Rest Framework, но код Visual Studio, похоже, не срабатывает на них. (Я не очень знаком с отладкой с помощью кода Visual Studio, так что это может быть моя ошибка).
  • Удалено любое пользовательское промежуточное ПО, поэтому единственное оставшееся промежуточное ПО выглядит следующим образом:
corsheaders.middleware.CorsMiddleware
django.contrib.sessions.middleware.SessionMiddleware
django.middleware.locale.LocaleMiddleware
django.middleware.common.CommonMiddleware
django.middleware.csrf.CsrfViewMiddleware
django.contrib.auth.middleware.AuthenticationMiddleware
django.contrib.messages.middleware.MessageMiddleware

До сих пор любые похожие проблемы, с которыми сталкивались другие люди, кажутся немного другими (т. Е. Internet Explorer удаляет точку в расширении и заменяет ее подчеркиванием).

Есть предположения о том, что здесь может происходить? Я немного озадачен.

1 Ответ

0 голосов
/ 23 апреля 2019

Я наконец понял, что здесь происходит.Пользовательский интерфейс, который использовался для запуска загрузки, делал это путем создания временного тега привязки (см. Второй ответ здесь: Загрузить файл URL-адреса данных ).Когда это было так, у него было два разных случая.В одном случае при загрузке нескольких файлов расширение файла будет изменено на .zip.В другом случае, при загрузке одного файла, он все еще пытался добавить расширение, но при написании кода интерфейса пользователь устанавливал расширение как пустую строку.Таким образом, конечный результат - это добавляемый период, но не продление после этого.Например, если загружаемый файл был «test.txt», он получился бы как «test.txt.», Который затем был преобразован Chrome в «test.txt_» в Windows, чтобы сделать его допустимым расширением файла..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...