DJango Python文件上传如何保存原始文件

时间:2017-09-27 17:24:49

标签: python django django-rest-framework

我正在尝试使用Rest将文件上传到DJango Python API。但我注意到文件被修改了。具体而言,添加了内容处置。我还没有找到一个好方法来删除它。问题是我正在尝试上传需要解压缩的tar,但修改后的内容会阻止解压缩文件。

我在休息页面上使用此文件解析器: 来自rest_framework.parsers导入FileUploadParser

以下代码似乎在APIView的post方法中为我获取文件

file_obj = request.FILES['file']
scanfile.file.save(file_obj.name, file_obj)

其中scanfile是具有文件字段的模型。 该文件将使用以下内容保存:

--b3c91a6c13e34fd5a1e253b1a72d63b3
Content-Disposition: form-data; name="file"; filename="sometar.tgz"
My tar file contents here.....
--b3c91a6c13e34fd5a1e253b1a72d63b3

我的客户端看起来像这样:

filename = "sometar.tgz"
exclusion = "../../exclusionlist.txt"
headers = {'Content-Type': 'multipart/form-data;’,
           'Authorization': 'JWT %s' % token,
           }
url = "http://localhost:%s/api/scan/Project/%s/" % (port, filename)
#files = {'file': open(filename, 'rb'), 'exclusion_file': open(exclusion, 'rb')}  # also tried this way but it just put the info in the same file and I see the headers in the file
files = [('file', open(filename, 'rb')), ('file', open(exclusion, 'rb'))]
x = requests.post(url, files=files, headers=headers)

所以我的问题是如何从保存的文件中删除内容处理信息,以便我可以正确解压缩文件?

1 个答案:

答案 0 :(得分:0)

request.FILES['file']UploadedFile个对象。您可以使用request.FILES['file'].name获取其名称,并使用request.FILES['file'].read()获取内容。

您应该注意read()和大文件:

  

从文件中读取整个上传的数据。小心这个   方法:如果上传的文件很大,它可能会压倒你的系统   你试着将它读入内存。你可能想要使用块()   代替;见下文。

https://docs.djangoproject.com/en/1.11/ref/request-response/#django.http.HttpRequest.FILES https://docs.djangoproject.com/en/1.11/ref/files/uploads/#django.core.files.uploadedfile.UploadedFile