阿里OSS对象存储 失败——与阿里售后工程师的一次沟通

阿里OSS对象存储

前几天公司要求做一个app上传视频和图文的功能,针对视频与图片的上传,公司这边走的是阿里的OSS对象存储。

在之前的测试过程中,部分视频上传会失败。由于我对这个OSS存储不是很熟,因此我咨询了阿里的售后工程师,结果发现:我挺瞎的……[捂脸]

与阿里售后工程师聊天记录如下:

在这里插入图片描述
问题描述:有些几M的视频是可以上传成功的,但是超过几M之后就不能上传成功了,但是具体几M,我还不清楚……,也没有办法弹窗提示用户。

在提供了一系列的上传参数后,阿里工程师回复如下:

在这里插入图片描述
在这里插入图片描述
在前端代码中,我找到了这个content-length-range字段,然后将参数调大,问题解决……

后面附上Uniapp上传视频到阿里OSS对象存储后,返回网址的代码:

async chooseVideo() {
	let _this = this;
	console.log(_this.editorCtx);
	uni.chooseVideo({
			count: 1, //最多可以选择的图片张数,默认9
			sizeType: ['compressed'], //original 原图,compressed 压缩图,默认二者都有
			sourceType: ['album', 'camera'], //album 从相册选图,camera 使用相机,默认二者都有
			success: (respone) => {
				uni.showLoading({
				    title: '加载中'  
				});
				console.log(respone.size);
				if(respone.size > 100 *1024 *1024){
					uni.showToast({
						title:"当前视频超过100M",
						icon:"none"
					})
					return;
				}
				_this.$request.urlRequest(
					'/gate/oss/token', {},
					'GET',
					(res) => {
						if (res.code == 200) {
							let data = res.result;
							console.log(data);
							let env = {
								uploadImageUrl: 'https://58d.oss-cn-hangzhou.aliyuncs.com/', // 默认存在根目录,可根据需求改
								AccessKeySecret: data.AccessKeySecret, // AccessKeySecret 去你的阿里云上控制台上找
								OSSAccessKeyId: data.AccessKeyId, // AccessKeyId 去你的阿里云上控制台上找
								stsToken: data.SecurityToken,
								timeout: 87600 //这个是上传文件时Policy的失效时间
							}
							let dir = 'shipin/';
							console.log(respone);
							let filePath = respone.tempFilePath;
							const aliyunFileKey = dir + new Date().getTime() + Math.floor(Math.random() * 150) + '.mp4';
							const aliyunServerURL = env.uploadImageUrl; //OSS地址,需要https
							const accessid = env.OSSAccessKeyId;
							const policyBase64 = _this.getPolicyBase64(env);
							const signature = _this.getSignature(policyBase64, env); //获取签名
							const stsToken = env.stsToken;

							let param = {
								'key': aliyunFileKey,
								'policy': policyBase64,
								'OSSAccessKeyId': accessid,
								'signature': signature,
								'success_action_status': '200',
								'x-oss-security-token': stsToken,
								'stsToken': stsToken
							};

							uni.uploadFile({
								url: "https://58d.oss-cn-hangzhou.aliyuncs.com/", //开发者服务器 url
								filePath: filePath, //要上传文件资源的路径
								name: 'file', //必须填file
								formData: param,
								success: (res) => {
									uni.hideLoading();
									_this.detail.media = aliyunServerURL + aliyunFileKey;
									console.log(_this.detail.media);
								},
								fail: (err) => {
									uni.hideLoading();
								},
						})
					}
				}
			)
		}
	});
},
getSignature(policyBase64, env) {
	const accesskey = env.AccessKeySecret;
	const bytes = Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, {
		asBytes: true
	});
	const signature = Crypto.util.bytesToBase64(bytes);
	return signature;
},
getPolicyBase64(env) {
	let date = new Date();
	date.setHours(date.getHours() + env.timeout);
	let srcT = date.toISOString();
	const policyText = {
		"expiration": srcT, //设置该Policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了
		"conditions": [
			["content-length-range", 0, 100 * 1024 * 1024] // 设置上传文件的大小限制,50mb
		]
	};
	const policyBase64 = base64.encode(JSON.stringify(policyText));
	return policyBase64;
},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶浩成520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值