が実質的に空になります私の例では20kb)。Filedownload問題Djangoはファイル
したがって、ダウンロードするファイルは、製品instance.id(static_cdn/protected/instance.id/image.jpg - context:ユーザーが対応する製品ビューにファイルをアップロードできる製品サイト)の静的フォルダにあります。 )。
ただし、製品ビューからダウンロードしようとすると、正しいファイル名(ファイル名の前に追加されたinstance.id番号を含む)を含むファイルがダウンロードされますが、ファイルサイズはほとんどnullです。私はそれがProductDownloadViewクラスで行う必要があると思います。
下記関連のコードを見つけてください:
views.py:
class ProductDownloadView(MultiSlugMixin, DetailView):
model = Product
def get(self, request, *args, **kwargs):
obj = self.get_object()
filepath = os.path.join(settings.PROTECTED_ROOT, obj.media.path)
response = HttpResponse(file(filepath), content_type="application/force-download")
response["Content-Disposition"] = "attachment;filename=%s" % (obj.media.name)
response["X-SendFile"] = str(obj.media.name)
return response
models.py
class Product(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)
managers = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="managers_product")
media = models.FileField(blank=True,
null=True,
upload_to=download_media_location,
storage=FileSystemStorage(location=settings.PROTECTED_ROOT))
def __unicode__(self):
return self.title
def get_absolute_url(self):
view_name = "products:detail_slug"
return reverse(view_name, kwargs={"slug": self.slug})
def get_download(self):
view_name = "products:download_slug"
url = reverse(view_name, kwargs={"slug": self.slug})
return url
印刷OBJ、ファイルパスと応答変数の下に見つけてください。
print obj: PR8
印刷ファイルパス: C:\ Users \ユーザーXX \ xxは\ xxは\ market_place \ static_cdn \
Beach.jpg
\ 8 \を保護された印刷応答: のContent-Type:アプリケーション/強制ダウンロード コンテンツの廃棄:添付ファイル、ファイル名= 8/Beach.jpg X-SENDFILE:8/Beach.jpgJFIF C
[21/6月/ 2017年2時17分05秒] "GET/products/pr8/download/HTTP/1.1" 200 52
ありがとうございます。残念ながら、それはそのトリックをしませんでした。私は私の質問では、ファイルのダウンロード中にobj、filepath、およびresponse変数のログを追加しました。 – Gamelogic
こんにちはYkh、私はそれをオープンメソッドにファイルメソッドを変更し、 "rb"などのモードを追加して作業しました。ファイルメソッドでモードを追加することもできます。 – Gamelogic
大丈夫です。 – Ykh