スタック・オーバーフロー Asked by Laurentech on December 18, 2020
ご閲覧ありがとうございます。
非常に初歩的な質問で恐縮ですが、質問させていただきます。
現在、DjangoでWebAPIの開発を行っており、ファイルを扱いたいと考えています。
そこで、下記サイトを参考にファイルのダウンロード周りを整えております。
https://pc.atsuhiro-me.net/entry/2014/09/28/140421
このとき、ブラウザから特定のURLにアクセスするとファイルのダウンロードが行われるのでしょうか。”download(request)を実行するとファイルがダウンロードされるようにします”と書かれておりましたが、ここがイマイチピンときていません。
ご回答よろしくお願いします。
このサイトにて掲載されているテキストファイルをダウンロードする例を引用します。
def download(request):
output = io.StringIO()
output.write("First line.n")
response = HttpResponse(output.getvalue(), content_type="text/plain")
response["Content-Disposition"] = "filename=text.txt"
return response
これが実現する機能は、サーバアプリケーション内部でファイルのようなレスポンスを作成し、ファイルとしてユーザーにダウンロードさせる
(この例だとfile.txtというファイル名で「First line.」という内容のファイルを作成し、ダウンロードさせる)であり、Laurentechさんが求めているであろう サーバのローカルに存在するファイルをユーザーにダウンロードさせる
ではありません。
英語版Stack Overflowに今回とほぼ同等の質問があり、これによると素直にファイルを直接開き、HttpResponse
で返すのが良いようです。
import os
from django.conf import settings
from django.http import HttpResponse
def download(request, path):
file_path = os.path.join(settings.MEDIA_ROOT, path)
if os.path.exists(file_path):
with open(file_path, 'rb') as fh:
response = HttpResponse(fh.read(), content_type="application/vnd.ms-excel")
response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path)
return response
raise Http404
Answered by PicoSushi on December 18, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP