Django下载文件

我是使用Django的新手,我正在尝试开发一个网站,用户可以在其中上传许多excel文件,然后将这些文件存储在媒体文件夹Webproject / project / media中。

def upload(request):

if request.POST:

form = FileForm(request.POST, request.FILES)

if form.is_valid():

form.save()

return render_to_response('project/upload_successful.html')

else:

form = FileForm()

args = {}

args.update(csrf(request))

args['form'] = form

return render_to_response('project/create.html', args)

然后,该文档会与它们上载的任何其他文档一起显示在列表中,你可以单击这些文档,它会显示有关它们的基本信息以及他们上载的excelfile的名称。从这里,我希望能够使用链接再次下载相同的excel文件:

 <a  href="/project/download"> Download Document </a>

我的网址是

 urlpatterns = [

url(r'^$', ListView.as_view(queryset=Post.objects.all().order_by("-date")[:25],

template_name="project/project.html")),

url(r'^(?P<pk>\d+)$', DetailView.as_view(model=Post, template_name="project/post.html")),

url(r'^upload/$', upload),

url(r'^download/(?P<path>.*)$', serve, {'document root': settings.MEDIA_ROOT}),

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

但我得到了错误,serve()得到了一个意外的关键字参数’document root’。谁能解释如何解决此问题?

要么

解释如何获取上传的文件以进行选择和使用

def download(request):

file_name = #get the filename of desired excel file

path_to_file = #get the path of desired excel file

response = HttpResponse(mimetype='application/force-download')

response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name)

response['X-Sendfile'] = smart_str(path_to_file)

return response

回答:

你错过了参数文档_ root 下划线。但是serve在生产中使用它是个坏主意。使用类似这样的东西:

import os

from django.conf import settings

from django.http import HttpResponse, Http404

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

以上是 Django下载文件 的全部内容, 来源链接: utcz.com/qa/416811.html

回到顶部