【uniapp】阿里云OSS上传 [视频上传]

devtools/2024/10/18 18:21:04/

引用uniapp插件市场的插件,使用的是视频上传阿里云 oss上传)
我只使用了H5和App端,需要后端配置跨域
yk-authpup详情请参考 》》【用户告知权限申请的目的】
【插件市场】阿里云存储OSS前端直接上传(全端通用) - 前端JASON

在这里插入图片描述

<template>
<view><view class="bg pd-20-30"><view class=""><view class="mg-tb-25 fbc">上传视频<view v-if="editVideo" @click="delVideo" class="c-d41 font-26">删除</view></view><view class="bg-f57 mg-t-20 h-600"><progress class="file-picker__progress-item" :percent="vProgress" stroke-width="4" /><view v-if="editVideo" class="relative wh-100p"><video :autoplay="false" class="wh-100p" :src="editVideo" :poster="editVideo+'?x-oss-process=video/snapshot,t_100,f_jpg'"></video></view><view v-if="!editVideo" @click="judgment('video')" class="t_c wh-100p fcc"><view class=""><uni-icons type="videocam" size="45" color="#d8d8d8"></uni-icons><view class="font-25 c-cc spa_1" style="margin-top: -15rpx;">上传效果视频</view></view></view></view></view></view><!-- 用户告知权限申请的目的,在App端上传视频图片等需要有权限提示(华为审核上架必备) --><yk-authpup ref="authpup" :permissionID="permissionID" @changeAuth="changeAuth"></yk-authpup>
</view>
</template><script>
import { ossUpload } from '@/js_sdk/alioss-upload/oss.js'
export default {data() {return {editVideo: '',vProgress: 0,// 用户告知权限申请的目的changeType: '',soIndex: 0,permissionID:''};},methods: {judgment(_type) { // 判断H5还是Appthis.changeType = _type;// #ifdef APP-PLUSlet that=this;that.permissionID = 'WRITE_EXTERNAL_STORAGE';if (plus.os.name == 'Android') setTimeout(()=>{ that.$refs['authpup'].open(); },200)if (plus.os.name == "iOS") that.changeAuth();// #endif// #ifdef H5this.changeAuth();// #endif},changeAuth() { //用户授权权限后的回调if(this.changeType =='video') this.chooseVideo();},chooseVideo() { // 上传视频let that=this;uni.chooseVideo({count: 1,sourceType: ['album'],success: async function (rey) {// console.log(rey)let _name;// #ifdef APP-PLUS_name = rey.tempFilePath;// #endif// #ifdef H5_name = rey.name;// #endifconst {success,data} = await ossUpload(rey.tempFilePath, _name, 'uploads/video/',function(_ret){that.vProgress=_ret.progress});if(success){that.editVideo=data;} else{that.toast(data)}returnuni.showLoading({ title: '上传中',mask: true });uni.uploadFile({url: that.uploadUrl,filePath: rey.tempFilePath,name: 'file',success: (uploadFileRes) => {let res = JSON.parse(uploadFileRes.data)uni.hideLoading();if(res.code==1){that.editVideo=res.data;} else{that.toast(res.msg)}},});},fail: (err) => { console.log(err)if(plus.os.name == "iOS"&&err["errMsg"]=="chooseVideo:fail No filming permission"){setTimeout(()=>{ that.$refs['authpup'].open(); },200)}}});},delVideo() {this.editVideo=''; this.vProgress=0;},}
};
</script><style>
image{ pointer-events: all; }
.video_cover{position: absolute; top: 0; left: 0; bottom: 0; z-index: 1;/* background-color: rgba(1,1,1,.5); */
}
</style>

js_sdk/alioss-upload文件下的js

在这里插入图片描述

oss.js

import { Base64 } from './base64.js'
import { util } from './crypto.js'
import { HMAC } from './hmac.js'
import { SHA1 } from './sha1.js'// ======下面这3个信息必填======
const url = '_您的URL_';
const OSSAccessKeyId = '_您的OSSAccessKeyId_';
const OssAccesskeySercet= '_您的OssAccesskeySercet_';
// console.log(uni.getStorageSync('aliossUp'))const policyText = {"expiration": "2034-01-01T12:00:00.000Z", // 设置Policy的有效期,格式为UTC时间。如果Policy失效,将无法上传文件。"conditions": [["content-length-range", 0, 1048576000] // 限制上传文件的大小,单位为字节,此处限制文件大小为1 GB。如果上传的文件大小超过此限制,文件将无法上传到OSS。如果未设置该限制,则默认文件大小最大为5 GB。]
}const policy = Base64.encode(JSON.stringify(policyText))
const bytes = HMAC(SHA1, policy, OssAccesskeySercet, { asBytes: true })
const signature = util.bytesToBase64(bytes)// 生成文件名随机字符串
function random_string(len) {const strLeng = len || 32;const chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';   const maxPos = chars.length;let pwd = '';for (let i = 0; i < strLeng; i++) {pwd += chars.charAt(Math.floor(Math.random() * maxPos));}return pwd;
}// 获取文件后缀
function get_suffix(filename) {const pos = filename.lastIndexOf('.')let suffix = ''if (pos != -1) {suffix = filename.substring(pos)}return suffix;
}// dir格式:'img/'
export const ossUpload = (filePath, name, dir,onUploadProgress) => {const key = dir + random_string(10) + get_suffix(name)return new Promise((resolve, reject) => {const uploadTask = uni.uploadFile({url,filePath,name: 'file',formData: {name,key,policy,OSSAccessKeyId,success_action_status: '200',signature},success: () => {resolve({success: true, data: url+key})},fail: () => {reject({success: false, data: '上传失败'})}})// ======做了一些修改加了一个上传进度======uploadTask.onProgressUpdate((res) => {onUploadProgress(res)// console.log('上传进度' + res.progress);// console.log('已经上传的数据长度' + res.totalBytesSent);// console.log('预期需要上传的数据总长度' + res.totalBytesExpectedToSend);});})
} 

http://www.ppmy.cn/devtools/38362.html

相关文章

【C++】详解STL容器之一的 vector

目录 概述 迭代器 数据结构 优点和缺点 接口介绍 begin end rbegin rend resize reseve insert erase 其他一些接口 模拟实现 框架 获取迭代器 深浅拷贝 赋值重载 reseve resize 拷贝构造 构造 析构 insert erase 其他 概述 vector是STL的容器之一。…

ruoyi-nbcio 基于flowable规则的多重并发网关的任意跳转

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

算法day01

1、[283.移动零](https://leetcode.cn/problems/move-zeroes/) 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 解题思路&#xff1a; 双指针…

将unity中相机位置保存为json 文件或者 发送给后端

将unity中相机位置保存保存到服务器 ///相机的位置public Transform cameraTransform;void Start(){// SaveCameraPosition("sd");// ("{\"name\":\"sd\",\"position\":\"(0.00, 5.00, -12.00)\",\"rotation\&qu…

WordPress MasterStudy LMS插件 SQL注入漏洞复现(CVE-2024-1512)

0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。WordPress plugin是一个应用插件。 0x02 漏洞概述 WordPress Plugin MasterStudy LMS 3.2.5 版本及之…

中金:如何把握不断轮动的资产“风口”

从比特币到日股&#xff0c;到黄金与铜再到当前的港股&#xff0c;每次超预期大涨后都透支回调。 今年以来资产的“风口”不断轮动&#xff0c;从比特币到日股&#xff0c;到黄金与铜&#xff0c;再到当前的港股&#xff0c;资产仿佛“接力”般交替领先&#xff0c;同时“风口”…

大数据中的HDFS读写流程(namenode,datanode)

HDFS读写流程 读取流程 1、客户端请求上传文件 2、namenode检查是否存在&#xff0c;可以上传&#xff0c; 3、客户端请求第一个block块上传到datanode 4、namenode返回3个datanode节点&#xff0c;d1,d2,d3 5、客户端请求dn1调用数据&#xff0c;d1收到请求会继续调用d2&#…

MVVM框架下的Mapster工具包

目录 引言 高性能对象映射框架 Mapster 1、简单映射 2、数据类型 2.1、基本类型 2.2、枚举类型 2.3、字符串类型 2.4、集合 2.5、可映射对象 3、映射配置 3.1、全局设置 3.2、基于条件的映射 3.3、未知源类型 3.4、泛型类型 4、映射配置的继承 4.1、源类型映射…