从django 1.4.3中的媒体文件夹下载文件(上载的文件)

Shi*_*dla 9 python media django file download

我正在使用django来设计处理文件夹uploadingdownloading文件media夹的文件的基本网页

其实这些文件在媒体文件夹上传成功,也文件被成功下载,但一个underscore附加到file_name中的last charaterfile_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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

因此,在上面的代码中,当一个文件被在媒体上传成功,它将被重定向到files_list.html通过files_list其与下载链接显示在表格的形式的文件的总数在每个文件名称旁边视图的功能.

因此,当我们点击下载锚链接时,将通过执行该功能下载相应的文件download.

因此,该文件被成功地下载,而是underscore _被附加到最后的文件名一样的file_one.pdf_,file_two.pdf_,file_three.txt_ 等.

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

gor*_*che 6

只需/在文件名后删除.

改变这个:

response['Content-Disposition'] = 'attachment; filename=%s/' % smart_str(file_name) 
Run Code Online (Sandbox Code Playgroud)

对此:

response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name) 
Run Code Online (Sandbox Code Playgroud)


Cum*_*kin 6

您的代码正确,但其中有一个冗余字符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
Run Code Online (Sandbox Code Playgroud)

最后一行的filename属性带有一个斜杠(/):filename=%s/

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