我有一个本地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中尝试过将文件作为二进制文件添加到主体并将标头设置为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功能为何与众不同?
答案 0 :(得分:0)
您可以尝试使用UTF-16解码并在代码中执行进一步的操作。
这是代码:
contents = contents.rstrip("\n").decode("utf-16")
基本上在完成re.get_body之后,执行以下操作:
.container
查看它是否为您提供与本地python文件中的接收结果相同的输出。
希望有帮助。