12

私はdjangoを使用して、フォルダーuploadingdownloadingの間のファイルを処理する基本的なWebページを設計していますmedia

実際には、ファイルはメディア フォルダに正常にアップロードされ、ファイルも正常にダウンロードされますが、ファイル名に、 などのよう にunderscoreが追加されます。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

ビュー.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れ、ファイルの総数が表の形式で表示され、各ファイル名の横にダウンロード リンクが表示されます。

したがって、ダウンロード アンカー リンクをクリックすると、関数を実行して適切なファイルがダウンロードされますdownload

そのため、ファイルは正常にダウンロードされていますが、ファイル名の最後に、などのようにunderscore _追加されています 。file_one.pdf_file_two.pdf_file_three.txt_

上記のダウンロード関数コードの何が問題なのか、なぜファイル名にunderscore追加されているのか、それをファイル名からfile name削除する方法を教えてくださいunderscore...

4

5 に答える 5

6

/ファイル名の後に削除するだけです。

これを変える:

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

これに:

response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name) 
于 2013-12-17T08:05:27.027 に答える