Как скачать zip-файл со стороны сервера на сторону клиента (django реагирует) - PullRequest
0 голосов
/ 10 апреля 2019

На моем сервере django у меня есть файл, который загружает некоторые файлы из s3 и затем объединяет их в архив.Затем я хочу отправить этот zip-файл клиентской стороне и загрузить его на клиентской стороне.Однако, когда я пытаюсь открыть zip-файл на стороне клиента, я получаю An error occurred while loading the archive

. Я работаю на Ubuntu 14.04 с бэкэндом django и внешним интерфейсом реакции.Я попытался передать файл как файл tar, но это тоже не сработало.Я также пробовал много разных способов передачи zip-файла в HTResponse, но всегда получаю одну и ту же ошибку.Сейчас, чтобы попытаться заставить его работать, я просто пытаюсь загрузить zip-файл, который я скачал на свой локальный компьютер.

Я пробовал несколько разных типов content_type из application / zip, в octet / stream ипринудительная загрузка.

бэкэнд django

zip_path = '/home/konstantin/Downloads/sup.zip'
        content_path = mime.guess_type(zip_path)

        with open(zip_path, 'rb') as zip_file:

            response = HttpResponse(zip_file, content_type='application/zip')
            response['Content-Length'] = str(os.stat(zip_path).st_size)

            response['Content-Disposition'] = 'attachment; filename={}'.format('willthiswork.zip')
            return response

реакция внешнего интерфейса (у нас есть программа, которая изменяет python на js).Ответ на вызов ajax передается непосредственно в этот метод.

def download(self,url):
        data = __new__(Blob([url], {"type": "octet/stream"}))
        csvURL = window.URL.createObjectURL(data)
        tempLink = document.createElement('a')
        tempLink.href = csvURL
        tempLink.download = 'willthiswork.zip'
        tempLink.click()

Ожидаемый результат: Zip-файл загружается на стороне клиента и доступен для открытия. Фактический результат: Zip-файл загружается, но не может быть открыт.

1 Ответ

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

так что я наконец понял это.По какой-то причине все стандартные решения простой передачи регулярного httpresponse не работали для меня, но этот ответ работал для меня.Зачем?ИДК.но это сделал.

https://stackoverflow.com/a/29939024/11312013

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