1

我正在构建一个基于 django 的数据库应用程序,允许用户上传支持文档。我们预计到项目结束时会有大约 100 万页的 pdf。存储库将分解为 3,000 - 5,000 个不同的文件夹(由客户指定)。我有一个记录这些文件的数据库表。该表包括文档的名称和存储文档的文件夹。

我正在寻找将这些文档备份给客户的最佳方式。我有一个基本的搜索工具,可以在 html 表中列出文档。我希望表格包含指向已上传文档的 html 链接。我只是不确定如何创建此链接。更具体地说,我不确定如何自己提供文件。我想使用 django 而不是直接通过 apache 为它们提供服务,因为我想使用 django 的权限系统。

我可以为此使用 staticfiles 应用程序吗?我担心 staticfiles 看起来像是想将文件从一个地方复制到另一个地方(考虑到存储库的大小,这可能不切实际)。我也不确定静态文件将如何处理动态文件夹结构。在文件实际上传之前,我们不会知道文件夹结构。最后,django 文档特别指出静态文件应用程序不是为用户上传的文档设计的。

也许我只需要某种 django 视图,但我无法让以下工作 -

def document(request, path, name):
    path = os.path.join(settings.DOCUMENT_ROOT, path, name)
    pdf = open(path, 'r')
    response = HttpResponse(pdf, mimetype='application/pdf')
    response['Content-Disposition'] = 'attachment; filename=' + name
    return response

当 adobe reader 尝试打开附件时,它会告诉我文件已损坏(或不受支持)。任何投入将不胜感激!

4

1 回答 1

0

好吧,我暂时只使用一个简单的 django 视图-

@login_required
@permission_required('reporting.can_view_documents', raise_exception=True)
def document(request, path, name):
    path = os.path.join(settings.DOCUMENT_ROOT, path, name)
    pdf = open(path, 'rb')
    response = HttpResponse(pdf.read(), mimetype='application/pdf')
    response['Content-Disposition'] = 'attachment; filename=' + name
    return response
于 2012-05-14T14:17:34.677 回答