如何使用graphene-django上传和下载文件?

时间:2018-03-27 03:07:07

标签: django graphql file-transfer graphene-python

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

1 个答案:

答案 0 :(得分:4)

<强> UPLOADS

您不需要发明自己的前端代码来将文件上传添加到变异中 - 现有的软件包已经执行此操作。例如,apollo-upload-client如果您使用的是Apollo。

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

(更新)但是,如果可能的话,我会建议使用graphene-django not 上传文件,因为它会在后端和前端增加大量的复杂性。我的团队最终取消了我们正在处理的graphene-django文件上传代码,并将其替换为standard Django file upload

<强>下载

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

这样的东西
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页面。