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

引用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还是App
			this.changeType = _type;
			// #ifdef APP-PLUS
			let 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 H5
			this.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;
					// #endif
					
					const {success,data} = await ossUpload(rey.tempFilePath, _name, 'uploads/video/',function(_ret){
						that.vProgress=_ret.progress
					});
					if(success){
						that.editVideo=data;
					} else{
						that.toast(data)
					}
					return
					uni.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.mfbz.cn/a/605038.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

scikit-learn多因子线性回归预测房价

1.首先是单因子线性回归预测房价 import numpy as np import pandas as pd from matplotlib import pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score# 1.读取csa房屋数据 path D:/pythonDATA/us…

【前端学习——css模块化】

https://segmentfault.com/a/1190000039772466#item-2 CSS 命名方法论 为选择器增加冗长的前缀或后缀&#xff0c;手写命名前缀后缀的方式来生成全局唯一的命名 很麻烦不方便 CSS Modules 在外部管理 CSS&#xff0c;然后将类名映射到组件内部&#xff0c;他会为每个 class 都…

[C++]哈希应用-布隆过滤器快速入门

布隆过滤器 布隆过滤器&#xff08;Bloom Filter&#xff09;是一个由布隆在1970年提出的概率型数据结构&#xff0c;它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器的主要特点是高效的插入和查询&#xff0c;可以用于检索一个元素是否在一个集合中。 原理…

box-decoration-break 使用介绍

box-decoration-break属性的使用 一、定义 box-decoration-break是CSS片段模块&#xff08;CSS Fragmentation Module Level 3&#xff09;中的一个属性&#xff0c;主要用于指定背景&#xff08;background&#xff09;、内边距&#xff08;padding&#xff09;、边框&#…

K邻近算法

简介 介绍了非常简单的算法&#xff1a;K邻近算法&#xff0c;即KNN。 基本介绍 K-近邻算法&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;是一种基本且广泛应用的监督学习算法&#xff0c;主要用于分类和回归任务。 工作原理非常简答直观&#xff1a;所谓…

nginx: [emerg] invalid number of arguments in “alias“ directive in D:\nginx

问题背景 最近在配置一个nginx的配置&#xff0c;但是reload的时候遇到了以下报错 D:\nginx>nginx -s reload nginx: [emerg] invalid number of arguments in "alias" directive in D:\nginx/conf /nginx.conf:113 解决方案 关于“alias”指令中的参数数量错误…

十二届蓝桥杯Python组1月中/高级试题 第一题

** 十二届蓝桥杯Python组1月中/高级试题 第一题 第一题&#xff08;难度系数2&#xff0c;18 个计分点&#xff09; 编程实现&#xff1a; 输入一个字符串&#xff0c;输出这个字符串的最后一个字符。 输入描述&#xff1a;输入一个字符串 输出描述&#xff1a;输出这个字符串…

OpenCV单窗口并排显示多张图片

OpenCV单窗口并排显示多张图片 效果代码 PS&#xff1a;本例的代码适合图片的宽度和高度都相同。 效果 原始三张图片&#xff1a; 合并显示&#xff1a; 代码 import cv2 import numpy as npdef opencv_multi_img():# 读取图片img1 cv2.imread(saw_1.jpeg)img2 cv2.im…

2024软件测试自动化面试题(含答案)

1.如何把自动化测试在公司中实施并推广起来的&#xff1f; 选择长期的有稳定模块的项目 项目组调研选择自动化工具并开会演示demo案例&#xff0c;我们主要是演示selenium和robot framework两种。 搭建自动化测试框架&#xff0c;在项目中逐步开展自动化。 把该项目的自动化…

实验五 Spark Structured Streaming编程实践

一、编写程序 (1). 按照tag分组统计生成的日志数。 在新开的终端内输入 vi spark_exercise_testsyslog1.py &#xff0c;贴入如下代码并运行。运行之前需要关闭“tail终端”内的tail命令并重新运行tail命令&#xff0c;否则多次运行测试可能导致没有新数据生成。 #!/usr/bin…

Rust使用HashSet对Vec类型的元素进行去重

在Rust语言中&#xff0c;对Vec类型的元素进行去重&#xff0c;一种常见的方法是使用一个HashSet来帮助我们快速检查元素是否已经存在。以下是使用HashSet对Vec进行去重的示例代码&#xff1a; use std::collections::HashSet;fn main() {let vec_numbers vec![1, 2, 2, 3, 4…

Marin说PCB之国产电源芯片方案 ---STC2620Q

随着小米加入的造车大家庭&#xff0c;让这个本来就卷的要死的造车大家庭更加卷了。随之带来的蝴蝶效应就是江湖上各个造成门派都开始了降本方案的浪潮啊&#xff0c;开始打响价格战了。各家的新能源车企也是不得不开始启动了降本方案的计划了&#xff0c;为了应对降价的浪潮。…

手游广告归因新选择:Xinstall助力精准衡量投放效果

在手游市场竞争日益激烈的今天&#xff0c;广告主们面临着如何精准衡量广告投放效果的难题。手游广告归因平台的出现&#xff0c;为广告主们提供了一种全新的解决方案。而Xinstall&#xff0c;作为其中的佼佼者&#xff0c;正以其独特的优势&#xff0c;助力广告主们破解这一难…

【AI大模型】AI大模型热门关键词解析与核心概念入门

&#x1f680; 作者 &#xff1a;“大数据小禅” &#x1f680; 文章简介 &#xff1a;本专栏后续将持续更新大模型相关文章&#xff0c;从开发到微调到应用&#xff0c;需要下载好的模型包可私。 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 目…

SPSS多元线性回归

&#xff08;要满足&#xff09;模型的假设条件需要对数据进行怎样处理&#xff1f;&#xff1f; 为了使数据满足多元线性回归的条件&#xff0c;通常需要进行以下预处理步骤&#xff1a; 1. 数据清洗&#xff1a;处理缺失值、异常值和重复值&#xff0c;确保数据质量。 2. 特…

python-oracledb 已率先支持 Oracle 23ai

python-oracledb 介绍 python-oracledb (以下简称 oracledb) 是 Python cx_Oracle 驱动程序的新名称&#xff0c;如果你仍在使用 cx_Oracle&#xff0c;建议升级到最新版本的 oracledb。 oracledb 驱动程序是一个开源模块&#xff0c;使 Python 程序能够访问 Oracle 数据库。默…

美业SaaS系统多门店收银系统源码-【卡升组合促销规则】讲解分享

美业管理系统源码 博弈美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序 1、什么是卡升组合促销&#xff1f; 原价购买的卡项&#xff0c;卡状态正常的情况下&…

分红76.39亿,分红率再创新高,成长活力无限的伊利带来丰厚回报

伊利47万股东&#xff0c;又等来了一个好消息。 4月29日&#xff0c;伊利股份发布2023年报&#xff0c;实现营业总收入1261.79亿元&#xff0c;归母净利润104.29亿元&#xff0c;双创历史新高&#xff0c;实现连续31年稳健增长。 在递交亮眼成绩单的同时&#xff0c;乳业巨头伊…

MyBatis的其他查询操作

前言&#xff1a;在上篇博客介绍了MyBatis的一些增删改查操作&#xff0c;接下来介绍其他查询操作 目录 1 其他查询操作 1.1 多表查询 1.1.1 准备工作 1.1.2 数据查询 1.2 #{}和${} 1.2.1 #{}和${}使用 1.2.2 #{}和${}的区别 1.3 排序功能 1.4 like查询 2 数据库连接池 2.1 …

C++反射之检测struct或class是否实现指定函数

目录 1.引言 2.检测结构体或类的静态函数 3.检测结构体或类的成员函数 3.1.方法1 3.2.方法2 1.引言 诸如Java, C#这些语言是设计的时候就有反射支持的。c没有原生的反射支持。并且&#xff0c;c提供给我们的运行时类型信息非常少&#xff0c;只是通过typeinfo提供了有限的…
最新文章