Django загружает двоичный файл с FastApi (Minio Designed URL), но файл поврежден и загружается с неправильным именемPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Django загружает двоичный файл с FastApi (Minio Designed URL), но файл поврежден и загружается с неправильным именем

Сообщение Anonymous »

Я использую Django (Frontend) и Fastapi (Backend) с Minio в качестве хранилища файлов. Моя настройка:

[*] FastApi генерирует заданный minio download_url для файла.
Django получает метадаты через FastApi, затем загружает файл с использованием requests.get (download_url, stream = true) и возвращает его с помощью wreaminghtpress
Вот мой представление Django для загрузки файла: < /p>

Код: Выделить всё

from django.http import StreamingHttpResponse, Http404
from django.utils.encoding import smart_str
from urllib.parse import quote
import requests

def download_file(request, file_id):
print(f'file_id = {file_id}')
try:
url = f"http://89.150.34.163:8000/api/v1/student/download/{file_id}"
response = requests.get(url)
if response.status_code != 200:
raise Http404("Файл не найден")

json_data = response.json()
download_url = json_data.get("download_url")
original_filename = json_data.get("original_filename", f"file_{file_id}")
print(f'filename: {original_filename}')

if not download_url:
raise Http404("Ссылка на скачивание отсутствует")

file_response = requests.get(download_url, stream=True)
if file_response.status_code != 200:
raise Http404("Ошибка при скачивании файла")
filename_ascii = smart_str(original_filename)
filename_utf8 = quote(original_filename)

response = StreamingHttpResponse(
streaming_content=file_response.iter_content(chunk_size=8192),
content_type=file_response.headers.get("Content-Type", "application/octet-stream")
)
response['Content-Disposition'] = (
f'attachment; filename="{filename_ascii}"; '
f"filename*=UTF-8''{filename_utf8}"
)

return response

except Exception as e:
print(f"Ошибка при скачивании: {e}")
raise Http404("Ошибка при скачивании файла")
Когда я загружаю файл через браузер (вставка the Download_url непосредственно), он работает отлично - корректное имя файла и содержимое. The .docx file becomes corrupted and can't be opened in MS Word (even though the byte size is correct—e.g., 23526 bytes).
I tried using smart_str and quote() to handle Unicode/cyrillic filenames and validating that FastAPI returns the correct download_url and Original_filename .
Есть предложения? Есть ли лучший способ прокси -файл из назначенного Minio URL через Django без коррупции?

Подробнее здесь: https://stackoverflow.com/questions/796 ... he-file-is
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»