Python 将文件的物理路径映射到服务下载路径

Python 将文件的物理路径映射到服务下载路径,python,angularjs,django,Python,Angularjs,Django,在我的AngularJS/Python应用程序中,我使用dropzone上传了一个文件,该文件的物理路径如下: D:\uploadedFiles\tmpmj02zkex_uuuuuuuu5526310795850751687_n.jpg' 现在我想为这个文件创建一个链接,以便在前端显示和下载。类似以下内容的链接: http://127.0.0.1:8000/uploadedFiles/tmpmj02zkex___5526310795850751687_n.jpg 实现这一点的最佳方法是什么?您只

在我的AngularJS/Python应用程序中,我使用
dropzone
上传了一个文件,该文件的物理路径如下:

D:\uploadedFiles\tmpmj02zkex_uuuuuuuu5526310795850751687_n.jpg'

现在我想为这个文件创建一个链接,以便在前端显示和下载。类似以下内容的链接:

http://127.0.0.1:8000/uploadedFiles/tmpmj02zkex___5526310795850751687_n.jpg


实现这一点的最佳方法是什么?

您只需在
url.py中添加url模式即可:

from django.conf.urls import url
from . import views

urlpatterns = [
    ...,
    url(r'^uploadedFiles/(?P<file_name>.+)/$', views.download, name='download')
]

我们需要指定内容类型吗?上传的文件可以是任何类型否,我们没有,但建议使用,如中所述。我已经更新了这个示例,因此无论文件类型如何,它都会强制用户下载。我必须将url模式更改为
url(r'^uploadedFiles/(?P[\w\-.]+)/$,download,name='download'),
,这样就成功了。谢谢伟大的啊,我的错,你是对的。它可以更简单,如中所建议的
(?P.+)
import os
from django.conf import settings
from django.http import HttpResponse

# path to the upload dir
UPLOAD_DIR = 'D:\uploadedFiles'

...

def download(request, file_name):
    file_path = os.path.join(UPLOAD_DIR, file_name)
    if os.path.exists(file_path):
        with open(file_path, 'rb') as fh:
            response = HttpResponse(fh.read(), content_type="application/octet-stream")
            response['Content-Disposition'] = 'attachment; filename=' + os.path.basename(file_path)
            return response
    else:
        raise Http404