【问题标题】:Map physical path of a file to serve path for download映射文件的物理路径以提供下载路径
【发布时间】:2017-02-10 07:02:27
【问题描述】:

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

D:\uploadedFiles\tmpmj02zkex___5526310795850751687_n.jpg'

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

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

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

【问题讨论】:

    标签: python angularjs django


    【解决方案1】:

    您可以简单地在例如添加一个 url 模式。 urls.py:

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

    以及控制器中的download 方法,例如。 views.pyhere 中建议:

    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
    

    【讨论】:

    • 我们需要指定内容类型吗?上传的文件可以是任意类型
    • 不,我们不这样做,但建议按照here 中的说明进行操作。我已经更新了示例,无论文件类型如何,它总是强制用户下载
    • 我不得不将 url 模式更改为 url(r'^uploadedFiles/(?P&lt;file_name&gt;[\w\-.*]+)/$', download, name='download'), 并且它有效。谢谢!
    • 太棒了。啊,我的错,你是对的。正如here中所建议的,它可以更简单(?P&lt;file_name&gt;.+)
    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    相关资源
    最近更新 更多