Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用graphene django上载和下载文件?_Django_Graphql_File Transfer_Graphene Python - Fatal编程技术网

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

如何使用graphene django上载和下载文件?,django,graphql,file-transfer,graphene-python,Django,Graphql,File Transfer,Graphene Python,我目前正在使用graphene django v2.0,我完全不知道如何上传和下载像图像这样的文件,有没有人有一个可以下载图像的查询和一个可以上传图像的变体的例子?上传 您不需要发明自己的前端代码来将文件上传添加到变体中——现有的软件包已经在这样做了。例如,如果您使用的是阿波罗 要在后端接收上载的文件,这些文件将在字典request.files中可用。因此,任何处理文件上传的变异都需要检查info.context.FILES.items以获取并保存文件数据。这段代码的细节将取决于保存文件的最终目

我目前正在使用graphene django v2.0,我完全不知道如何上传和下载像图像这样的文件,有没有人有一个可以下载图像的查询和一个可以上传图像的变体的例子?

上传

您不需要发明自己的前端代码来将文件上传添加到变体中——现有的软件包已经在这样做了。例如,如果您使用的是阿波罗

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

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

下载

对于下载,我建议不要使用graphQL进行实际下载。而是创建一个Django函数视图,该视图返回
HttpResponse
FileResponse
并设置内容处置头。差不多

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

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

有一个名为graphene file upload的包,github:它应该为您完成这项工作。我还没能让它工作,但试一下吧。这对于一个有效的实现示例可能很有用。你能详细说明你的最后两句话吗?我不确定graphQL和
URL.py
是如何相互作用的……在本例中,我指的是一个不使用graphQL的普通Django流——因此您需要编辑url.py,以普通Django方式路由到下载视图。谢谢,我想我已经开始弄清楚了:顺便问一下,您如何在查询中传递地址?在我的工作中,我们有不同的环境(local-api.address.com/8000、test-api.address.com、api.address.com等),您知道如何从django获得正确的环境吗?