-2

ajax を使用して django 関数にリクエストを送信し、django 関数が zip ファイルを生成してユーザーに提供しています。URLdomain.com/django/builder/zipit/にアクセスすると、ファイルが期待どおりに生成され、コンピューターにダウンロードされますが、ajaxを使用して応答が返されると、ajaxはダウンロードできません。応答を php 変数に渡してダウンロードすることはできますか? ファイルが動的に作成されるため、iframe の使用は機能しません。

アヤックス

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

ビュー.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
4

1 に答える 1

0

PHP 変数に渡す必要はありません。django 自体ですべてが可能です。

application/x-zip-compressed に設定された mimetype

ただし、リクエストごとに zip アーカイブを作成することはお勧めできません。これにより、サーバーが停止する可能性があります (アーカイブが大きい場合、タイムアウトはカウントされません)。パフォーマンス上のアプローチは、生成された出力をファイルシステムのどこかにキャッシュし、ソース ファイルが変更された場合にのみ再生成することです。さらに良いアイデアは、事前にアーカイブを準備し (例: cron ジョブによって)、Web サーバーがそれらを通常の静的として提供するようにすることです。

# 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")
于 2012-06-14T06:48:32.783 に答える