13

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

4

1 回答 1

20

上传

您不需要发明自己的前端代码来将文件上传添加到突变 - 现有的包已经这样做了。例如,如果您使用的是 Apollo,则为apollo-upload-client 。

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

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

下载

对于下载,我建议不要使用 graphQL 进行实际下载。而是创建一个 Django 函数视图,该视图返回一个HttpResponseorFileResponse并设置 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 页面。

于 2018-03-27T15:24:50.723 回答