У меня случается довольно странная ситуация: мне трудно отследить существующее приложение 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 удаляет точку в расширении и заменяет ее подчеркиванием).
Есть предположения о том, что здесь может происходить? Я немного озадачен.