3

我编写了一个简单的脚本来扩展我的 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)

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

在此处输入图像描述

但是,该文件一旦重命名 - 确实包含我想要的图像。我在这方面找不到任何东西,为什么这个脚本不起作用真的很令人困惑。

4

1 回答 1

3

您正在构建您的 requestsfiles参数错误,请查看有关如何构建它的官方文档。

在你的情况下:action = {"file": (file_name, file)}应该做的伎俩。

于 2017-06-09T17:43:14.213 回答