简介:python通过form-data上传图片,解决PHP无法通过$_FILES获取图片的问题
首先来看看网上python图片上传的代码:
import requests
# 图片文件路径
image_path = 'path_to_your_image.jpg'
# 其他参数
params = {
'username': 'your_username',
'api_key': 'your_api_key',
# 更多其他参数...
}
# 将图片文件读入内存并包装为一个MIME类型对象
with open(image_path, 'rb') as f:
image_file = ('image.jpg', f.read(), 'image/jpeg')
# 构造POST请求
response = requests.post(
'http://your_server_url/upload_endpoint',
data=params, # 传递非文件类型的数据
files={'image': image_file}, # 上传图片文件
)
# 检查响应状态码
if response.status_code == 200:
print("图片上传成功,服务器返回:", response.text)
else:
print("图片上传失败,状态码:", response.status_code)
这种方式上传图片,服务器可能无法接收到。主要原因是,上传的数据格式不是标准的 form-data 格式导致
以PHP为例,通常PHP都是通过 $_FILES 获取form-data上传的图片,但是上面的方式无法通过 $_FILES 获取,但是可以通过 file_get_contents('php://input') 获取上传的图片数据。这样会给后台人员增加工作量,那有没有什么解决方法呢?
我们可以把所有数据通过 encode_multipart_formdata 打包成 form-data 格式的数据,具体代码如下:
import requests,os
# 请求参数
data = {"timeStamp":"aaaa","random_str":"ssdsd"}
# 打开图片并转化为字节流
with open(file_path,'rb') as f:
data['file'] = (os.path.basename(file_path), f.read())
# 将所有请求参数打包成form-data格式的数据
encode_data = encode_multipart_formdata(data)
# 设置headers,一般需要设置'Content-Type'为'multipart/form-data'
headers = {
'Content-Type': encode_data[1],
}
url = '上传的url'
return requests.post(url, data=encode_data[0], headers=headers)
返回的是一个response对象,可以获取返回的状态码,返回的文本及json格式后的结果
# 状态码
response.status_code
# 服务器返回的文本内容
response.text
# json格式化的结果
response.json()
有遗漏或者不对的可以在我的公众号留言哦