热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

uniapp使用阿里oss上传

可以删除重新上传,点击图片大图等功能。

可以删除重新上传,点击图片大图等功能。

<view class="uploadView">
<view class="imageView" v-if="!imgShow">
<view class="upload_img_view">
<image src="../../../../static/img/SquareImg/shop_add.png" mode="" class="upload_img"
@click
="uploadImg(['camera','album'])">
image>
view>
<view class="text">图片需大于600x450px,不超过3Mview>
view>
<view class="imageView upload_view" v-else>
<view class="img_List" v-for="(item,index) in img" :key="index">
<image :src="item" mode="aspectFit" class="imgShow" @tap="refundPicPreView(item)">image>
<image src="../../../../static/img/SquareImg/dyn_icon_del@3x.png" mode="" class="delete_icon"
@click
="delImg(index)">image>
view>
<view class="upload_img_view">
<image src="../../../../static/img/SquareImg/shop_add.png" mode="" class="upload_img"
@click
="uploadImg(['camera','album'])">
image>
view>
<view class="text">图片需大于600x450px,不超过3Mview>
view>
view>

1、变量 引入import uploadImage from "../../../../js_sdk/yushijie-ossutil/ossutil/uploadFile"

data() {
return {
imgShow:
false, //图片上传控制
img: [],
image: [],
//传给后台的图片集合
}
},

2、js methods

//上传图片
uploadImg(sourceType) {
const thisSelf
= this;
let oldImgsArr
= thisSelf.img; //已上传的图片集合
uni.chooseImage({
count:
9, // 默认最多一次选择9张图
sourceType: sourceType, // 可以指定来源是相册还是相机,默认二者都有
success: res => {
console.log(
'resss', res)
// 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
var tempFilePaths = res.tempFilePaths; //重新上传图片的集合
var newImgsArr = tempFilePaths.concat(oldImgsArr); //将已上传的图片集合与重新上传的图片集合拼接起来形成一个新的集合
thisSelf.img = newImgsArr; //这里的是展示在视图上的已上传图片的集合(已上传的+重新上传的)
var newArr = [];
var imgStr = '';
//支持多图上传
for (var i = 0; i ) {
//显示消息提示框
uni.showLoading({
title:
'上传中...'
});
//上传图片
//图片路径可自行修改
uploadImage(tempFilePaths[i], 'picture/',
function(res) {
uni.hideLoading();
thisSelf.imgShow
= true;
newArr.push(res)
},
function(res) {
//失败回调
}
)
}
setTimeout(()
=> {
let trueImgs
= oldImgsArr.concat(newArr);
trueImgs.forEach(img
=> {
return imgStr += img + ',';
})
thisSelf.image
= imgStr.substr(0, imgStr.length - 1); //这里是真实图片的集合 传此值给后台
}, 1000)
}
})
},
//删除图片
delImg(index) {
this.img.splice(index, 1);
if (this.img.length == 0) {
this.imgShow = false;
this.img = [];
}
},
//图片预览
refundPicPreView(imge) {
var urls = []
urls.push(imge)
uni.previewImage({
current: urls[
0],
urls: urls
})
},

 

3、uploadFile.js代码

const env = require('./config.js'); //配置文件,在这文件里配置你的OSS keyId和KeySecret,timeout:87600;

const base64
= require('./base64.js');//Base64,hmac,sha1,crypto相关算法
require('./hmac.js');
require(
'./sha1.js');
const Crypto
= require('./crypto.js');
/*
*上传文件到阿里云oss
*@param - filePath :图片的本地资源路径
*@param - dir:表示要传到哪个目录下
*@param - successc:成功回调
*@param - failc:失败回调
*/
const uploadFile
= function (filePath, dir, successc, failc) {
if (!filePath || filePath.length <9) {
uni.showModal({
title:
'图片错误',
content:
'请重试',
showCancel:
false,
})
return;
}

//图片名字 可以自行定义, 这里是采用当前的时间戳 + 150内的随机数来给图片命名的
const aliyunFileKey = dir + new Date().getTime() + Math.floor(Math.random() * 150) + '.png';

const aliyunServerURL
= env.uploadImageUrl;//OSS地址,需要https
const accessid = env.OSSAccessKeyId;
const policyBase64
= getPolicyBase64();
const signature
= getSignature(policyBase64);//获取签名

uni.uploadFile({
url: aliyunServerURL,
//开发者服务器 url
filePath: filePath,//要上传文件资源的路径
name: 'file',//必须填file
formData: {
'key': aliyunFileKey,
'policy': policyBase64,
'OSSAccessKeyId': accessid,
'signature': signature,
'success_action_status': '200',
},
success:
function (res) {
console.log(res);
if (res.statusCode != 200) {
failc(
new Error('上传错误:' + JSON.stringify(res)))
return;
}
successc(aliyunServerURL
+aliyunFileKey);
},
fail:
function (err) {
err.wxaddinfo
= aliyunServerURL;
failc(err);
},
})
}
const getPolicyBase64
= function () {
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, 5 * 1024 * 1024] // 设置上传文件的大小限制,5mb
]
};
const policyBase64
= base64.encode(JSON.stringify(policyText));
console.log(policyBase64);
return policyBase64;
}
const getSignature
= function (policyBase64) {
const accesskey
= env.AccessKeySecret;
const bytes
= Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, {
asBytes:
true
});
const signature
= Crypto.util.bytesToBase64(bytes);
console.log(signature);
return signature;
}
module.exports
= uploadFile;

 



推荐阅读
  • HTML:  将文件拖拽到此区域 ... [详细]
  • 探索百度WebFE团队打造的强大HTML5上传插件Web Uploader
    本文将详细介绍由百度WebFE团队开发的Web Uploader,这是一款集成了HTML5与Flash技术的上传组件,以其卓越的用户体验和强大的功能著称。 ... [详细]
  • 高效的JavaScript异步资源加载解决方案
    本文探讨了如何通过异步加载技术处理网页中大型第三方插件的加载问题,避免将大文件打包进主JS文件中导致的加载时间过长,介绍了实现异步加载的具体方法及其优化。 ... [详细]
  • JavaScript 实现图片文件转Base64编码的方法
    本文详细介绍了如何使用JavaScript将用户通过文件输入控件选择的图片文件转换为Base64编码字符串,适用于Web前端开发中图片上传前的预处理。 ... [详细]
  • AI炼金术:KNN分类器的构建与应用
    本文介绍了如何使用Python及其相关库(如NumPy、scikit-learn和matplotlib)构建KNN分类器模型。通过详细的数据准备、模型训练及新样本预测的过程,展示KNN算法的实际操作步骤。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • 本笔记为自用,倘若没有相关的学习基础,也确实无法看懂文章写的是什么。近来有点越学越回去的感觉。竟然突然在想,为什么深度学习模型可以对图像进行分类或者语义分割。可怕的是,当时想到这里 ... [详细]
  • 张正友相机标定算法解析:无需棋盘格
    本文深入探讨了张正友教授于1998年提出的单平面标定技术,该方法结合了传统标定与自标定的优势,通过简易的棋盘格实现了高效准确的相机标定。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 本文详细介绍了笔记本电脑上多种实用的快捷键,包括屏幕调整、图形设置、分辨率更改、驱动更新、导航操作、音量控制及屏幕锁定等,旨在帮助用户更高效地使用笔记本电脑。 ... [详细]
  • 深入解析WebP图片格式及其应用
    随着互联网技术的发展,无论是PC端还是移动端,图片数据流量占据了很大比重。尤其在高分辨率屏幕普及的背景下,如何在保证图片质量的同时减少文件大小,成为了亟待解决的问题。本文将详细介绍Google推出的WebP图片格式,探讨其在实际项目中的应用及优化策略。 ... [详细]
author-avatar
情系初冬_883
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有