当我尝试使用文件(从客户端通过ajax请求接收到的文件)从flask发送发帖请求时,我遇到了一个例外:“要解压缩的值太多(预期2)
我在执行步骤3时遇到异常。 我不确定这是否是发布此类文件的正确方法,因为我是不熟悉烧瓶的人。请提供一些可能有用的输入。
客户端代码
$('input[type="file"]').change(function (e) {
var formData = new FormData(e.target.files[0]);
var fileName = e.target.files[0].name;
var fileType = e.target.name;
var settings = {
"async": true,
"crossDomain": true,
"url": "/upload?file_name="+fileName+"&file_type="+fileType,
"method": "POST",
"contentType": false,
"cache": false,
"processData": false,
"data": formData
};
$.ajax(settings).done(function (response) {
console.log(response);
});
});
烧瓶代码
@app.route('/upload', methods=['GET','POST'])
def uploadToExternalServer():
if request.method == "POST":
try:
file_content=request.files['file']
file_type= request.args.get('file_type')
file_name= request.args.get('file_name')
url="url to post with params"
response = requests.post(url, auth=('usr', 'pwd!'),files=file_content)
return r
except Exception as e:
logging.info(e.args[0])
Expected:
应该能够将文件成功发布到外部服务器
Actual:
在请求后获取异常的原因是:“要解压缩的值太多(预期2)
答案 0 :(得分:0)
检查Requests的文档
我认为您的问题是,您正在尝试将文件像对象一样传递,而param需要字典。
文件 –(可选)“名称”:类文件对象(或{'名称”:file-tuple})的字典,用于分段编码上传。文件元组可以是2元组(“文件名”,fileobj),3元组(“文件名”,fileobj,“ content_type”)或4元组(“文件名”,fileobj,“ content_type”,custom_headers),其中“ content-type”是一个字符串,用于定义给定文件的内容类型,而custom_headers是一个类似dict的对象,其中包含要为该文件添加的其他标题。