【问题标题】:How can I upload and download files with graphene-django?如何使用 graphene-django 上传和下载文件?
【发布时间】:2018-09-05 07:46:03
【问题描述】:

我目前正在使用graphene-django v2.0,我完全不知道如何上传和下载图像等文件,有没有人有一个查询示例,您可以在其中下载图像和突变可以上传吗?

【问题讨论】:

  • 有一个名为 graphene-file-upload 的包,github:github.com/lmcgartland/graphene-file-upload 应该可以为您完成工作。我还不能让它工作,但试一试。它可能对一个有效的实现示例很有用。

标签: django graphql file-transfer graphene-python graphene-django


【解决方案1】:

上传

您无需发明自己的前端代码即可将文件上传添加到突变 - 现有的软件包已经可以做到这一点。例如,apollo-upload-client 如果您使用的是 Apollo。

要在后端接收上传的文件,这些文件将在字典request.FILES 中可用。因此,任何处理文件上传的突变都需要检查info.context.FILES.items 以获取并保存文件数据。这段代码的细节将取决于保存文件的最终目的地。

(UPDATE) 但是,如果可能的话,我建议不要 使用 graphene-django 上传文件,因为它在后端和前端都增加了大量的复杂性.我的团队最终废弃了我们工作的 graphene-django 文件上传代码,并将其替换为 standard Django file upload

下载

对于下载,我建议不要使用 graphQL 进行实际下载。而是创建一个返回 HttpResponseFileResponse 并设置 Content-Disposition 标头的 Django 函数视图。类似的东西

from django.http import HttpResponse

def download(request):
    ... do stuff to get file contents and file name and mime_type
    response = HttpResponse(file_contents, content_type=mime_type)
    response['Content-Disposition'] = 'attachment; filename="{}"'.format(file_name)
    return response

然后将此下载路径添加到您的 urls.py 和 graphQL 查询响应中。因此 graphQL 将用于获取下载路径,但实际上下载文件将是一个常规的 Django 页面。

【讨论】:

  • 你能详细说明你的最后两句话吗?我完全不确定 graphQL 和 urls.py 是如何相互作用的……
  • 在这种情况下,我说的是一个不使用 graphQL 的普通 Django 流程——因此您可以编辑 urls.py 以以普通 Django 方式路由到下载视图。
  • 谢谢,我想我开始明白了 :D 顺便问一下,你如何在查询中传递地址?在我的工作中,我们有不同的环境(local-api.address.com/8000、test-api.address.com、api.address.com 等),你知道如何从 django 获得正确的环境吗?跨度>
猜你喜欢
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 2017-03-16
  • 2021-02-16
  • 1970-01-01
  • 2011-10-01
相关资源
最近更新 更多