就是我用的是uniapp,要用阿里云的服务端签名直传,后端给我返回了一个url上传链接,里面包含了签名的信息,需要用put请求,一般上传方法都是uni.uploadFile,但是uni.uploadFile这个不支持put,知道怎么做吗
- 发布:2023-10-27 15:11
- 更新:2024-09-11 15:06
- 阅读:344
HRK - 一位热爱uniapp的小少年^v^
可参考以下两片文章
https://ask.dcloud.net.cn/article/38747
https://ask.dcloud.net.cn/question/69859
a***@126.com - 亨瑞的uni-app
我也是遇到这个问题,然后是需要将uni-app打包成Android app来用,然后需要使用put上传图片到zmazon bucket上。
我这种情况是需要使用plus来做,因为官方的uni.uploadFile确实改造不了,以下的尝试行不通:
const task = uni.uploadFile({
url: url, //仅为示例,非真实的接口地址
filePath: filePath,
// name: 'file',
header: {
// 'Content-Type':'application/x-www-form-urlencoded'
// 'Content-Type': 'image/png'
'Content-Type' : 'multipart/form-data'
},
method: 'PUT',
formData: {
'_method': 'PUT'
},
success: (uploadFileRes) => {
console.log('上传成功----:', uploadFileRes.data);
},
fail: (err) => {
console.log('上传失败----:', err);
}
});
然后必须得使用plus.io来读取filePath成base64:
// #ifdef APP
plus.io.resolveLocalFileSystemURL(filePath, function( entry ) {
// 可通过entry对象操作test.html文件
console.log("----resolveLocalFileSystemURL--callback:", entry.getFile)
entry.file( function(file){
var fileReader = new plus.io.FileReader();
console.log("getFile:" + JSON.stringify(file));
fileReader.readAsText(file, 'utf-8');
fileReader.onloadend = function(evt) {
console.log("11" + evt);
console.log("evt.target" + evt.target);
console.log(evt.target.result);
}
console.log(file.size + '--' + file.name);
} );
}, function ( e ) {
console.log( "Resolve file URL failed: " + e.message );
} );
// #endif
其实uni-app的HBuilder X编译器会报语法错误,说entry没有file方法,只有getFile方法,但其实只有file方法,getFile是undefined.
然后你看看这篇文章:https://ask.dcloud.net.cn/question/106770?notification_id-84803rf-falseitem_id-25486 ,将arraybuffer通过uni.request去设置为put上传。
小幸运qaq (作者)
这两篇我都看过啦
2023-11-06 10:35