|
在做头像上传的时候,需要把头像上传到腾讯云COS,其中URL有个参数sign需要转码:如sign为G/kbUdynZNxT+LiK3Z6时,
上传URL为:?sign=G%2FkbUdynZNxT%2BLiK3Z6
所以在生成sign后使用encodeURIComponent对其编码:
var sign = 'G/kbUdynZNxT+LiK3Z6';
sign = encodeURIComponent(sign);
var url='http://tj.file**.**/files/v2/1122334455/webs/user_header/123456_headimg.png?sign='+sign;
api.ajax({
url: url,
method: 'post',
data: {
values: {
op: 'upload',
insertOnly:0
},
files: {
fileContent:file
}
}
},function(ret, err){
if (ret && ret.code==0) {
mapp.alert('上传成功');
} else {
mapp.alert('错误:'+JSON.stringify(err));
}
});
在ios(iphone X)上测试成功,同样的代码在android上测试上传失败,提示sign错误,拦截URL发现,android上ajax会自动对URL编码,IOS上不会,也就是我的sign在android上进行了两次encodeURIComponent编码工作,
android上URL的sign为:encodeURIComponent(encodeURIComponent(sign)); //非正常值
ios上URL的sgin为:encodeURIComponent(sign); //正常值
若直接使用未编码的sign,IOS上未编码,提示sign错误
这是ajax的BUG吗?
解决方法:if(api.systemType=='ios') sign = encodeURIComponent(sign);
当为ios时才进行编码!!
|
|