安卓6版本的pda图片上传不成功问题

文章讲述了在H5环境中,使用uni框架的uploadFileAPI在Android6版本上遇到的上传失败问题,原因是API自动移除了URL中的//。作者提供了解决方案,即在调用函数时检查并添加缺失的//到URL中。
摘要由CSDN通过智能技术生成

上传不成功代码:

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:后面是否包含//,不包含的话我们自己加上,反之不管。

以上就是我的实现思路。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值