2013-03-06 79 views
5

我使用Django的設計基本的網頁,處理​​和文件的downloading /從media文件夾下載Django中從媒體文件夾中的文件(上傳)1.4.3

其實文件在媒體文件夾中,也文件被成功下載上傳成功,但一個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 

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> 

所以在上面的代碼中,當一個文件被成功上傳在媒體中,它將被重定向到files_list.htmlfiles_list查看功能,它以表格形式顯示文件的總數,每個文件名旁邊都有下載鏈接。

因此,當我們點擊下載錨鏈接時,相應的文件將通過執行功能download下載。

因此文件下載成功地,而是一個underscore_被追加到最後的文件名一樣file_one.pdf_file_two.pdf_file_three.txt_等。

因此,誰能請讓我知道,什麼是錯誤的,我上面下載的功能代碼,爲什麼underscore被追加到file name以及如何刪除underscore從文件名稱...

回答

6

只是文件名後刪除/

更改此:

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

這樣:

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

你的代碼是正確的,但有一個多餘的字符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屬性有一個斜線(/):filename=%s/

導致問題的原因。刪除這個斜線,它的作品。

相關問題