上传不成功代码:
html部分代码
<block v-for="(item,index) in itemms" :key="index">
<view class="media-container">
<jade-image-upload :list="item.fileList1" :control="control"
:maxCount="maxCount" @chooseFile="chooseFile" @imgDelete="mediaDelete">
</jade-image-upload>
</view>
</block>
js部分代码
//上传
async chooseFile(e) {
for (var i = 0; i < e.length; i++) {
let url = e[i].uri;
let size = e[i].size;
await this.uploadFileToServe(url, size);
}
},
上传逻辑
uploadFileToServe(filePath, size) {
return new Promise((resolve, reject) => {
let jbsign = helper.createSignature(store.state.accessToken)
uni.uploadFile({
url: this.$mConfig.baseUrl + '/api/upload/uploadImage',
filePath,
name: 'file',
formData: {
folder: `repairapplyrecord`
},
header: {
JBOLTAPI: true,
jboltappid: store.state.appid,
jboltjwt: store.state.accessToken,
jboltrefreshjwt: store.state.refreshToken,
jboltsignature: jbsign.signature,
jbolttimestamp: jbsign.timestamp,
jboltnonce: jbsign.nonce
},
success: (res) => {
let data = JSON.parse(res.data);
if (!data.data.uri) {
resolve({
status: 'error',
progress: '上传失败',
url: data.data.uri
});
} else {
resolve({
status: 'success',
progress: '上传成功',
url: data.data.uri
});
}
},
file: (err) => {
console.log(err);
}
});
})
},
这段代码在H5端,安卓6版本以上是可以上传成功的,但是安卓6版本就是不成功。
最后经过我的排查发现是uni.uploadFile这个api里面的url路径不对,在安卓6版本里面他会自动的将http:后面的//给去掉,所以解决代码如下:
uploadFileToServe(filePath, size) {
var baseUrl = this.$mConfig.baseUrl
if (!baseUrl.includes("//")) {
baseUrl = baseUrl.replace("http:", "http://");
}
return new Promise((resolve, reject) => {
let jbsign = helper.createSignature(store.state.accessToken)
uni.uploadFile({
url: baseUrl + '/api/upload/uploadImage',
filePath,
name: 'file',
formData: {
folder: `repairapplyrecord`
},
header: {
JBOLTAPI: true,
jboltappid: store.state.appid,
jboltjwt: store.state.accessToken,
jboltrefreshjwt: store.state.refreshToken,
jboltsignature: jbsign.signature,
jbolttimestamp: jbsign.timestamp,
jboltnonce: jbsign.nonce
},
success: (res) => {
let data = JSON.parse(res.data);
if (!data.data.uri) {
resolve({
status: 'error',
progress: '上传失败',
url: data.data.uri
});
} else {
resolve({
status: 'success',
progress: '上传成功',
url: data.data.uri
});
}
},
file: (err) => {
console.log(err);
}
});
})
},
在调用这个函数的时候我们判断一下http:后面是否包含//,不包含的话我们自己加上,反之不管。
以上就是我的实现思路。