layui+oss阿里云附件上传回调报错问题
新的广告系统,
采用客户端直接上传到阿里云,阿里云异步调用服务器的模式(Browser.js)
参考地址:https://www.alibabacloud.com/help/zh/doc-detail/32069.htm?spm=a2c63.p38356.b99.702.5d66219fMXc1Ka
流程示意:
碰到问题:
上传图片提示The callback var is not expecten json
sts访问口令与参数配置都正确
删除上传的callback参数也可以上传成功,但是加上此参数就失败。
原因:
是因为callback里的传递参数必须是字符串类型,如果是int类型就会产生此问题。
别看原因简单,排查起来可是费了一番功夫。官方文档里暂时也没有看到对此的描述,只有如图下的一个demo
解决方法
let data_param = {
uid : admin_info.uid, //后台操作uid
app_name: app_name, //业务模块
app_table: app_table, //业务对应的表名
attach_type: attach_type, //附件类型,1图片,2视频
filename: file_name, //文件名称
filesize: file_size, //文件大小
file_type: file_type, //文件类型
file_ext: file_ext, //文件文件后缀
save_name: save_name, //阿里云的保存名称
save_path: save_path, //阿里云的保存路径
all_path : all_path, //阿里云全路径
is_video_banner: ''+is_video_banner, //是否视屏封面的图片存储
};
//all_path表示上传的object name , file表示上传的文件
client.multipartUpload(all_path, file, {
progress: async function (p, checkpoint) {
tempCheckpoint = checkpoint;
},
parallel: options.parallel ? options.parallel : 1,
partSize: options.partSize ? options.partSize : 102400,
checkpoint: tempCheckpoint,
mime: file_mime,
callback: {
url: setter.callback_api_url + '/admin/CommonOss/callbackFile',
body: 'bucket=${bucket}&object=${object}&imageInfo.height=${imageInfo.height}&imageInfo.width=${imageInfo.width}¶m=${x:param}',
contentType: 'application/x-www-form-urlencoded',
customValue:{
'param': JSON.stringify(data_param)
}
},
})
本质就是json化,这样的好处一是规避了上边报错问题,二是以后添加参数的时候,不用body里也配置了,省工。
author:hann