gpt4 book ai didi

python - 通过 HTTP POST 传递二进制文件

转载 作者:行者123 更新时间:2023-12-03 04:13:50 24 4
gpt4 key购买 nike

我有一个本地 python 文件,可以解码二进制文件。这个 python 文件首先从文件中读取,将其作为二进制文件打开,然后将其保存在缓冲区中并解释它。读起来很简单:

with open(filepath, 'rb') as f:
buff = f.read()
read_all(buff)

这在本地运行良好。现在我想设置一个 Azure Python 作业,我可以在其中发送文件,大约。 100kb,通过 HTTP POST,然后读取解释的元数据,我的原始 python 脚本做得很好。

我首先删除了读取函数,以便现在仅使用缓冲区。在我的 Azure Python 作业中,我有以下内容,由 HttpRequest 触发

my_data = reader.read_file(req.get_body())

为了测试我的发送,我在 python 中尝试了以下操作

import requests

url = 'http://localhost:7071/api/HttpTrigger'
files = {'file': open('test', 'rb')}
with open('test', 'rb') as f:
buff = f.read()

r = requests.post(url, files=files) #Try using files
r = requests.post(url, data=buff) #Try using data

我还尝试在 Postman 中将文件作为二进制文件添加到正文中,并将 header 设置为 application/octet-stream

所有这些都不会像原始 f.read() 那样发送二进制文件。所以我对二进制文件的解释是错误的。

file.read 的做法与我将其作为 HTTP 正文消息发送的方式有何不同?

从本地 python 读取文件中打印出第一行。

b'\n\n\xfe\xfe\x00\x00\x00\x00\\\x18,A\x18\x00\x00\x00(\x00\x00\x00\x1f\x00\x00\

而在 req.get_body() 中打印出来显示了我

b'\n\n\xef\xbf\xbd\xef\xbf\xbd\x00\x00\x00\x00\\\x18,A\x18\x00\x00\x00(\x00\x00\x00\x1f\x00\

所以显然有些事情是错误的。有什么帮助为什么这会有所不同吗?

谢谢

编辑:

我在 Flask 中实现了类似的功能,并且效果很好。Flask 中的代码只是从 POST 中获取文件。没有编码/解码。

if request.method == 'POST':
f = request.files['file']
#f.save(secure_filename(f.filename))
my_data = reader.read_file(f.read())

为什么 Azure Function 有所不同?

最佳答案

您可以尝试使用 UTF-16 进行解码并在代码中执行进一步的操作。

这是代码:

with open(path_to_file,'rb') as f:
contents = f.read()
contents = contents.rstrip("\n").decode("utf-16")

基本上在执行re.get_body之后,执行以下操作:

contents = contents.rstrip("\n").decode("utf-16")

看看它是否提供与本地 python 文件中接收到的相同的输出。

希望有帮助。

关于python - 通过 HTTP POST 传递二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54898424/

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