gpt4 book ai didi

python - 如何从 HTTP 响应接收 zip 文件

转载 作者:太空宇宙 更新时间:2023-11-03 20:33:25 26 4
gpt4 key购买 nike

上下文

总而言之,我有一个应用程序将一些文件或 JSON 发送到 Django 服务器,然后服务器处理该文件并创建一个新的 zip 文件。该 zip 文件必须返回到应用程序。我尝试仅使用 POST 请求来执行此操作,并返回文件作为响应。我能够使用 Postman 下载该文件作为响应,并且还可以在 HttpErrorResponse 属性之一中看到我想要的响应。我也found an answer可以做同样的事情,但是是在 Java 中。

一些信息

应用程序:使用 Ionic v4 制作 |服务器:Django 2.2.4

正面尝试

主要请求方法:

const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Accept': 'application/json',
}),
requestType: 'application/octet-stream'
};

this.http.post("http://127.0.0.1:8000/converter2/", file, httpOptions)
.pipe(
finalize(() => {
loader.dismiss();
})
)
.subscribe(data => {
console.log(data['body']);
}, error => {
console.log(error);
console.log(error.error.text)
});

尝试:

使用上述方法我收到此错误:

错误号 1 -> SyntaxError:JSON 中 JSON.parse 的位置 0 处出现意外的标记 P

我收到此错误是因为默认情况下,http 响应正在尝试解析响应。我阅读了 HttpClient 的文档,但不要过多谈论接收 zip 文件。

我看到一些答案,例如 this onethis too ,建议添加 { responseType: 'blob' }{ responseType: 'text' }。东这个我收到另一个错误:

错误号 2 -> 415 不支持的媒体类型

尝试将 requestType 作为 'application/zip''application/octet-stream' 发送会返回错误号 1。我还尝试将“接受”更改为这些值,结果是:

错误号 3 -> 406 无法满足请求接受 header

正如我之前所说,我可以通过 console.log(error.error.text) 访问 zip 文件,但我希望正确接收它,而不是作为错误。

服务器端尝试

主要响应方式:

# Return processed file
zip_file = open(zipfiles_folder + 'myfile.zip', 'rb')
return_response = HttpResponse(zip_file, content_type='application/force-download')
return_response['Content-Disposition'] = 'attachment; filename="%s"' % 'myfile.zip'
return return_response

尝试:

现在我尝试更改响应content_type,但没有成功,如下所示:

  1. content_type='application/zip'
  2. content_type='application/octet-stream'

然后我尝试follow some suggestions ,再次没有成功:

zip_file = open(zipfiles_folder + 'myfile.zip', 'rb')
return_response = HttpResponse(zip_file, content_type='application/force-download')
return_response['Content-Disposition'] = 'attachment; filename="%s"' % 'myfile.zip'
return_response['Content-Description'] = 'File Transfer'
return_response['Content-Transfer-Enconding'] = 'binary'
return return_response

ZIP 响应(不完全是这样,但非常相似):

PK     B�O<�'�   �      filename.shp  '
N� `�_I�*-!L��;� `�YI�ޞ�b��;�
`�YI�ޞ�b��;�
`�_I�*-!L��;�PK B�O�f#t t filename.shx '
:� `�_I�*-!L��;� `�YI�ޞ�b��;� 2
@
PK B�Opk��Z Z filename.dbfw A W FID N
0 1PK B�O�Z�� � filename.prjPROJCS["SIRGAS_2000_UTM_Zone_22S",GEOGCS["GCS_SIRGAS_2000",DATUM["D_SIRGAS_2000",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",10000000.0],PARAMETER["Central_Meridian",-51.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]PK B�O<�'� � �� filename.shpPK B�O�f#t t ��� filename.shxPK B�Opk��Z Z ��d filename.dbfPK B�O�Z�� � ��� filename.prjPK � �

最佳答案

您可以使用请求模块从 url 获取 zip 文件

import requests
url = 'https://www2.census.gov/geo/tiger/GENZ2017/shp/cb_2017_02_tract_500k.zip'
target_path = 'alaska.zip'

response = requests.get(url, stream=True)
handle = open(target_path, "wb")
for chunk in response.iter_content(chunk_size=512):
if chunk: # filter out keep-alive new chunks
handle.write(chunk)
handle.close()

这里下载了 zip 并从 URL 提供服务,并将保存在名称为“alaska.zip”的目录中。

除此之外,您还可以访问此 answer

关于python - 如何从 HTTP 响应接收 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57332348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com