最近做项目遇到个表单上传多张图片的问题,所以记录下服务端的处理
我们首先要了解表单的格式
我们这里用jemeter模拟前端进行多张图片上传
图1表示表单里非图片的参数和值
image.png
图2表示表单里图片的参数和流
image.png
返回提交表单时,我们看下发送给服务端的究竟是什么格式的,这个可以在jemeter里的请求内容可以看到
image.png
通过这个截图里可以看到箭头表示是以这个字符串做分隔的,后端解析表单时肯定是通过这个字符串去分隔知道表单里有哪些参数和内容。红色下划线的表示参数,蓝色下划线的表示参数值。Content-Type表示分隔这一块里的内容类型。这里已经很清楚表单的格式了,下面我们看下python后端是如何解析表单的(python3.6版本)。
def post(self):
response = response = {"return_code": 500, "return_info": "出现了个服务器内部的错误,可能是参数问题导致的"}
values = {}
try:
value = self.request.body_arguments
file_metas = self.request.files['file']
print(values)
#获取非图片参数
app_device = value.get("app_device",None)
app_device = str(app_device[0],encoding="utf-8")
app_version = value.get("app_version",None)
app_version = str(app_version[0], encoding="utf-8")
token = value.get("token",None)
token = str(token[0],encoding="utf-8")
device_number =value.get("device_number",None)
device_number = str(device_number[0],encoding="utf-8")
#获取表单里的图片,其中meta["body"]表示二进制流
for meta in file_metas:
new_file_name = str(uuid.uuid4())
new_file_name = new_file_name.replace("-","")
#将jemeter发送过来的图片上传七牛云
qiniu_token = q.upload_token(qiniu_params["bucket_name"], new_file_name, 60)
ret, info = put_data(qiniu_token,new_file_name,meta["body"])
response = {"return_code":0,"return_info":"success"}
except Exception as e:
print(traceback.format_exc())
finally:
print(response)
self.write(response)












网友评论