python使用from-data上传图片

简介: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()

有遗漏或者不对的可以在我的公众号留言哦

编程经验共享公众号二维码

编程经验共享公众号二维码
更多内容关注公众号
Copyright © 2021 编程经验共享 赣ICP备2021010401号-1