django передает ответ ajax на переменную php

-2

Я использую ajax для отправки запроса моей функции django, которая затем генерирует zip файл и обслуживает его для пользователя. Если я иду в URL domain.com/django/builder/zipit/ в fileis сгенерированных, как ожидалось, и загружены на мой компьютер, но при использовании Ajax и ответ возвращается, Аякса косяк скачать. Могу ли я передать ответ на переменную php и загрузить ее таким образом? Использование iframe не работает, потому что файл создается динамически.

Аякса

$.ajax({
    type: 'POST',
    url: '/django/builder/zipit/',
    data: serialize,
    success: function(response){
        //pass response to php somehow
    }

views.py

def send_zipfile(request):
temp = tempfile.TemporaryFile()
archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
filename = '/home/dbs/public_html/download/video.html'
archive.write(filename, 'file.html')
archive.close()
wrapper = FileWrapper(temp)
response = HttpResponse(wrapper, content_type='application/zip', mimetype='application/x-download')
response['Content-Disposition'] = 'attachment; filename=dbs_content.zip'
response['Content-Length'] = temp.tell()
temp.seek(0)
return response
  • 1
    При чем тут PHP?
  • 0
Показать ещё 4 комментария
Теги:

1 ответ

0

Вам не нужно передавать его переменной PHP. Все возможно в самом джанго.

mimetype, установленный для приложения /x-zip-compress

Но будьте осторожны, создание zip-архивов по каждому запросу - плохая идея, и это может убить ваш сервер (не считая таймаутов, если архивы большие). Эффективный подход состоит в том, чтобы кэшировать сгенерированную выходную информацию где-то в файловой системе и восстанавливать ее только в том случае, если исходные файлы были изменены. Еще лучшая идея - заранее подготовить архивы (например, задание cron), и ваш веб-сервер будет обслуживать их как обычную статику.

# archive_list = ["ZipTest1.txt", "ZipTest2.txt", "ZipTest3.txt"]
# # save the files in the archive_list into a PKZIP format .zip file
# zfilename = "Wife101.zip"
# zout = zipfile.ZipFile(zfilename, "w")
# for fname in archive_list:
# zout.write(fname)
# zout.close()
return HttpResponse(zout,mimetupe="application/x-zip-compressed")
  • 0
    Я добавил свои views.py в свой пост
  • 0
    Попробуйте вышеупомянутый mimetype
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню