python - 使用 python 请求发送的类文件数据
问题描述
我正在使用 python 请求将文件发送到 API
files = [("file", open(path_to_file, 'rb'))]
headers = {"Authorization": "bearer " + CLIENT.token}
response = requests.request(
"POST",
SETTINGS.URL_FILE_STORAGE,
headers=headers,
files=files
# files= [('file',catalogo)],
)
这会抛出 202。但是,如果我将文件作为字节发送,那么 type(file) = Bytes
API 会抛出 500。将文件数据作为字节发送与将数据作为字节发送之间有什么联系open(path_file, 'rb')
?
解决方案
您使用的是哪个版本的请求?在当前的主分支中,至少应该没有区别。如果您跟踪 中的files
列表发生了什么requests.request
,您会发现type 的参数str
,bytes
并bytearray
作为 data 传递,而对于类似文件的对象,.read()
则执行该方法并使用其结果。
因此,以下应产生与您的代码相同的请求:
files = [("file", open(path_to_file, 'rb').read())] # Get file contents
headers = {"Authorization": "bearer " + CLIENT.token}
response = requests.request(
"POST",
SETTINGS.URL_FILE_STORAGE,
headers=headers,
files=files
# files= [('file',catalogo)],
)
如果 API 对这两个版本的响应不同,我会感到相当惊讶。
但如果是这样,并且您有bytes
需要转换为类文件对象的类型的数据,您可以简单地使用io
:
import io
files = [("file", io.BytesIO(data))]
headers = {"Authorization": "bearer " + CLIENT.token}
response = requests.request(
"POST",
SETTINGS.URL_FILE_STORAGE,
headers=headers,
files=files
# files= [('file',catalogo)],
)
推荐阅读
- c# - C# 中的 [Intrinsic] 属性有什么作用?
- maven - 在本地找不到工件 io.confluent:kafka-rest-parent:pom:5.4.0-SNAPSHOT 和“parent.relativePath”点
- azure - 如何在 azure 函数应用程序中将函数设为默认值?
- r - 交互式柱形图在闪亮时不起作用
- javascript - 如何计算总数
- c++ - 从 Windows 启动程序时如何查看键盘修饰符?
- php - laravel 请求不重定向正确的页面
- javascript - 如何在 React Native 中全局导入一些东西?
- python - 如何获取公共网站的“/path/to/certfile”请求?
- ios - 运行模拟器时导航项不出现,尽管导航栏出现在屏幕上