2

サーバー上のファイルを圧縮し、クエリがサーバーに送信されたときに zip ファイルを送信する Django スクリプトがあります。ただし、zip ファイルは、data.ZIP ではなく「download」という名前でダウンロードを続けます。data.ZIP は、名前を指定するものです。理由はありますか?私のコードは以下です。前もって感謝します!一部の画像と html をインポートするコードの一部は、それらが問題の一部であるとは思わないため省略しましたが、必要に応じて提供できます。

from django.http import HttpResponse
from django.core.servers.basehttp import FileWrapper
import urlparse
from urllib2 import urlopen
from urllib import urlretrieve
import os
import sys
import zipfile
import tempfile
import StringIO

def index(req):

    temp = tempfile.TemporaryFile()
    archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
    # Open StringIO to grab in-memory ZIP contents
    s = StringIO.StringIO()
    fileList = os.listdir('/tmp/images')
    fileList = ['/tmp/images/'+filename for filename in fileList]
    # The zip compressor
    zip = zipfile.ZipFile(s, "w")
    for file in fileList:
        archive.write(file, os.path.basename(file)) 
    zip.close()
    archive.close()
    wrapper = FileWrapper(temp)
    #Get zip file, set as attachment, get file size, set mime type
    resp = HttpResponse(wrapper, mimetype = "application/octet-stream")
    resp['Content-Disposition'] = 'attachment; filename="data.ZIP"'
    resp['Content-Length'] = temp.tell()
    temp.seek(0)
    return resp 

temp.seek(0) を追加して先頭に移動したときに表示される Web ページを表示するために画像が追加されました。 ここに画像の説明を入力

4

1 に答える 1

5

引用符なしで試してください:

resp['Content-Disposition'] = 'attachment; filename=data.ZIP'

私は以前にこれを行ったことがありますが、常に引用符は使用しません。また、ドキュメントは次のことを指摘しています。

ブラウザに応答を添付ファイルとして扱うように指示するには、content_type 引数を使用して Content-Disposition ヘッダーを設定します。

次のように変更mimetypeしてみてください。content_type

resp = HttpResponse(wrapper, content_type="application/octet-stream")

更新:この回答ファイルは、Python では常に空白でダウンロードされます。Djangoは、機能したコードを示しています。いくつかのビューで箱から出してテストできます。

お役に立てれば!

于 2013-06-25T13:16:29.197 に答える