Python3 请求 "Post" 使用 BytesIO 时忽略文件名?
Python3 Requests "Post" Ignoring Filename when using 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)
文件在网络服务器上的样子:
但是文件一旦重命名 - 确实包含我的图像。我在这方面找不到任何东西,这真的很令人困惑,为什么这个脚本不起作用。
您正在构造请求 files
参数错误,请查看 official documentation 以了解如何构造它。
在您的情况下:action = {"file": (file_name, file)}
应该可以解决问题。
我写了一个简单的脚本来扩展我的 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)
文件在网络服务器上的样子:
但是文件一旦重命名 - 确实包含我的图像。我在这方面找不到任何东西,这真的很令人困惑,为什么这个脚本不起作用。
您正在构造请求 files
参数错误,请查看 official documentation 以了解如何构造它。
在您的情况下:action = {"file": (file_name, file)}
应该可以解决问题。