Python3请求"发布"使用BytesIO时忽略文件名?

时间:2017-06-09 17:36:23

标签: python post python-requests bytesio

我已经用python编写了一个简单的脚本来扩展我的技能 - 但是在使用BytesIO时我发现了一些非常奇怪的东西。

这是我的工作脚本:

import requests

url = "http://MY.FAKE.IP.ADDR/Uploader.php"
file = open("test.jpg","rb")
action = {"file" : file, "name" : "test.jpg"}
requests.post(url, files=action) 

然而,当我尝试对内存中的图像做同样的事情时(例如,屏幕截图),网络服务器获取空白文件名?这是我的代码:

import requests
from PIL import ImageGrab
from io import BytesIO

url = "http://MY.FAKE.IP.ADDR/phUploader.php"

file_name = "test.jpg"

im = ImageGrab.grab()
output = BytesIO()
im.save(output, "JPEG")

file = output.getvalue()

action ={"file":file,"name":file_name}

requests.post(url,files=action)

该文件在网络服务器上的样子:

enter image description here

然而,文件一旦重命名 - 确实包含了我想要的图像。我无法在此找到任何内容,但为什么这个脚本无法正常工作真的让人感到困惑。

1 个答案:

答案 0 :(得分:1)

您正在构建请求files参数错误,请检查official documentation如何构建它。

在你的情况下:action = {"file": (file_name, file)}应该做到这一点。