django httpの応答でzipファイルを返そうとしていますが、コードは次のようになります...
archive = shutil.make_archive('testfolder', 'zip', MEDIA_ROOT, 'testfolder')
response = HttpResponse(FileWrapper(open(archive)),
content_type=mimetypes.guess_type(archive)[0])
response['Content-Length'] = getsize(archive)
response['Content-Disposition'] = "attachment; filename=test %s.zip" % datetime.now()
return response
このコードをubuntuで実行すると、ダウンロードされたファイルは問題なく開きますが、Windowsで実行すると、作成されたファイルはwinzipで開きません(エラー「サポートされていないZip形式」が表示されます)。
私がここで見逃している非常に明白な何かがありますか?Pythonコードは移植可能であると想定されていませんか?
編集:
コメントをくれたJFセバスティアンに感謝します...
アーカイブの作成に問題はなく、リクエストに読み戻されていました。したがって、解決策は、コードの2行目を次のように変更することです。
response = HttpResponse(FileWrapper(open(archive)),
content_type=mimetypes.guess_type(archive)[0])
に、
response = HttpResponse(FileWrapper(open(archive, 'rb')), # notice extra 'rb'
content_type=mimetypes.guess_type(archive)[0])
チェックアウト、詳細についてはこの質問への私の答え...