gpt4 book ai didi

python - 从 django 1.4.3 中的媒体文件夹下载文件(已上传)

转载 作者:太空狗 更新时间:2023-10-29 20:52:15 24 4
gpt4 key购买 nike

我正在使用 Django 设计基本网页,用于处理将文件上传下载到/从media文件夹

实际上文件已成功上传到媒体文件夹,文件也已成功下载,但 下划线 被附加到 file_name 作为 last charater file_one.pdf_ , file_two.pdf_ , file_three.txt_ 等,

下面是我的代码

urls.py

urlpatterns = patterns('',
url(r'^upload$', 'learn_django.views.upload'),
url(r'^files_list$', 'learn_django.views.files_list'),
url(r'^download/(?P<file_name>.+)$', 'learn_django.views.download'),
)
if settings.DEBUG:
urlpatterns = patterns('',
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
) + urlpatterns

views.py

def upload(request):
......
....
return render_to_response('uploads_form.html', {'form': form},context_instance=RequestContext(request))


def files_list(request):
return render_to_response('files_list.html',{'total_files':os.listdir(settings.MEDIA_ROOT),'path':settings.MEDIA_ROOT},context_instance=RequestContext(request))

def download(request,file_name):
file_path = settings.MEDIA_ROOT +'/'+ file_name
file_wrapper = FileWrapper(file(file_path,'rb'))
file_mimetype = mimetypes.guess_type(file_path)
response = HttpResponse(file_wrapper, content_type=file_mimetype )
response['X-Sendfile'] = file_path
response['Content-Length'] = os.stat(file_path).st_size
response['Content-Disposition'] = 'attachment; filename=%s/' % smart_str(file_name)
return response

files_list.html

<table border="1" colspan="2" width="100%">
<tr>
<th width="60%">File</td>
<th width="40%">Download</td>
</tr>
{% for file in total_files %}
<tr>
<td width="60%">{{file}}</td>
<td width="40%" align="center"><a href="/download/{{file}}" style="text-decoration:None">Download here</a></td>
</tr>
{% endfor %}
</table>

所以在上面的代码中,当一个文件成功上传到 media 时,它会被重定向到 files_list.html 通过 files_list 显示总数的 View 函数表格形式的文件,每个文件名旁边都有一个下载链接。

因此,当我们单击下载 anchor 链接时,将通过执行函数 download 下载相应的文件。

因此文件下载成功,但是 下划线 _ 附加到文件名的最后,如 file_one.pdf_file_two.pdf_ , file_three.txt_ 等,.

所以任何人都可以让我知道,我上面的下载功能代码有什么问题以及为什么 underscore 附加到 file name 以及如何删除 文件名中的下划线...

最佳答案

你的代码是正确的,但是download中有一个多余的字符:

def download(request,file_name):
file_path = settings.MEDIA_ROOT +'/'+ file_name
file_wrapper = FileWrapper(file(file_path,'rb'))
file_mimetype = mimetypes.guess_type(file_path)
response = HttpResponse(file_wrapper, content_type=file_mimetype )
response['X-Sendfile'] = file_path
response['Content-Length'] = os.stat(file_path).st_size
response['Content-Disposition'] = 'attachment; filename=%s/' % smart_str(file_name)
return response

最后一行文件名属性有一个尾部斜杠 (/):filename=%s/

导致问题的原因。删除此斜杠即可。

关于python - 从 django 1.4.3 中的媒体文件夹下载文件(已上传),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15246661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com