簡體   English   中英

允許用戶下載在AWS上生成的zip文件

[英]Allow user to download zip file generated on AWS

這是我生成ZIP並將其從服務器下載的方法,它在本地開發中效果很好。

import zipfile
doc = get_object_or_404(Document,)
filepath = doc.file.path
filename = os.path.basename(doc.file.name)
directory = os.path.dirname(filepath)

xzip = zipfile.ZipFile(os.path.join(directory,"%s.zip" % filename), "w")
xzip.write(filepath,filename)
xzip.close()

zip_file = open(xzip.filename, 'rb')
response = HttpResponse(zip_file, content_type='application/zip')
response['Content-Disposition'] = 'attachment; filename="%s.zip"' % 
                                   os.path.splitext(filename)[0]
return response

我所有的靜態和媒體文件都已上載到AWS中。 所以我改變了一點

 # filepath becomes
 filepath = settings.MEDIA_ROOT + "/" + doc.file.name

但是,當我嘗試下載它時,它給了我[Errno 2] No such file or directory鏈接:

https://bucket_name.s3.amazonaws.com/media/public/files/file.pdf.zip

settings.MEDIA_ROOT是:

AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY')

AWS_STORAGE_BUCKET_NAME = 'bucket_name'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME

AWS_PUBLIC_MEDIA_LOCATION = 'media/public'
MEDIA_ROOT = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, AWS_PUBLIC_MEDIA_LOCATION)

doc.file.path給我錯誤: 'This backend doesn't support absolute paths' doc.file.path 'This backend doesn't support absolute paths' ,這就是為什么我更改為MEDIA_ROOT + doc.file.name

如何從AWS下載生成的zip文件?

該文件存在於S3上,而不是本地文件系統上。 當您調用這些os.path.*函數時,代碼將嘗試在本地文件系統上查找文件。 這是給您的錯誤,因為您提供的S3 URL無法將路徑映射到本地文件系統上的任何內容。

為什么不通過僅返回帶有S3文件URL的重定向響應而不是嘗試讀取文件並返回響應中的內容,而不允許S3將文件直接提供給最終用戶的瀏覽器?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM