热门标签 | 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;

 



推荐阅读
  • PHP图床源码:集成化图床管理系统解决方案
    本项目提供了一套集成化的图床管理系统解决方案,适用于需要高效管理图片资源的场景。系统结构简洁,无需复杂的后台支持。主要文件包括 `huluxia.php`、`index.html`、`inews.php`、`kw.php` 和 `zz.php`,每个文件都承担了特定的功能,确保系统的稳定运行和易用性。 ... [详细]
  • 深入解析JWT的实现与应用
    本文深入探讨了JSON Web Token (JWT) 的实现机制及其应用场景。JWT 是一种基于 RFC 7519 标准的开放性认证协议,用于在各方之间安全地传输信息。文章详细分析了 JWT 的结构、生成和验证过程,并讨论了其在现代 Web 应用中的实际应用案例,为开发者提供了全面的理解和实践指导。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • 如何在 IntelliJ IDEA 中高效搭建和运行 Spring Boot 项目
    本文详细介绍了如何在 IntelliJ IDEA 中高效搭建和运行 Spring Boot 项目,涵盖了项目创建、配置及常见问题的解决方案。通过本指南,开发者可以快速掌握在 IntelliJ IDEA 中进行 Spring Boot 开发的最佳实践,提高开发效率。 ... [详细]
  • 【OpenCV4实战】掌握OpenCV中的键盘和鼠标事件处理技巧
    在《OpenCV4实战》中,本文详细介绍了如何在OpenCV中处理键盘和鼠标事件。首先,针对键盘事件,文章涵盖了基本原理、如何确定按键响应值以及通过按键调节图像亮度的具体方法。接着,对于鼠标事件,文章不仅讲解了基础理论,还提供了示例程序,帮助读者更好地理解和应用这些技术。通过这些内容,读者可以全面掌握OpenCV中键盘和鼠标事件的处理技巧。 ... [详细]
  • 深入解析 UIImageView 与 UIImage 的关键细节与应用技巧
    本文深入探讨了 UIImageView 和 UIImage 的核心特性及应用技巧。首先,详细介绍了如何在 UIImageView 中实现动画效果,包括创建和配置 UIImageView 实例的具体步骤。此外,还探讨了 UIImage 的加载方式及其对性能的影响,提供了优化图像显示和内存管理的有效方法。通过实例代码和实际应用场景,帮助开发者更好地理解和掌握这两个重要类的使用技巧。 ... [详细]
  • wxParse 0.3:微信小程序中的高级 HTML 和 Markdown 富文本解析器,全面支持多级嵌套与 Emoji 表情
    wxParse 0.3 是一款专为微信小程序设计的高级富文本解析器,支持 HTML 和 Markdown 转换为 WXML 可视化格式。该组件不仅能够处理复杂的多级嵌套结构,还全面支持 Emoji 表情,极大地提升了内容展示的多样性和用户体验。 ... [详细]
  • 石大师教你解决电脑黑屏问题:专业重装系统方法详解
    石大师教你解决电脑黑屏问题:专业重装系统方法详解 ... [详细]
  • HTTP请求与响应机制:基础概览
    在Web浏览过程中,HTTP协议通过请求和响应报文实现客户端与服务器之间的通信。当用户访问一个网页时,浏览器会发送一个HTTP请求报文至服务器,服务器接收到请求后,会生成并返回一个HTTP响应报文。这两种报文均包含三个主要部分:起始行、头部字段和消息体,确保了数据的有效传输和解析。 ... [详细]
  • Navicat for MariaDB 15:可视化数据洞察与智能图表功能详解
    Navicat for MariaDB 15:可视化数据洞察与智能图表功能详解 ... [详细]
  • 织梦系统多条件联动筛选功能详细教程及删除操作指南
    多条件联动筛选功能广泛应用于图片展示、装修设计、机械设备和在线商城等场景,通常筛选条件应聚焦于用户最关心的要素,而非涵盖所有可能的选项。在DedeCMS中,多条件筛选的PHP开发并未内置删除已选条件的功能,但通过理解PHP筛选与JS筛选的不同机制,实现这一功能相对简单且易于操作。 ... [详细]
  • 本文介绍了Android动画的基本概念及其主要类型。Android动画主要包括三种形式:视图动画(也称为补间动画或Tween动画),主要通过改变视图的属性来实现动态效果;帧动画,通过顺序播放一系列预定义的图像来模拟动画效果;以及属性动画,通过对对象的属性进行平滑过渡来创建更加复杂的动画效果。每种类型的动画都有其独特的应用场景和实现方式,开发者可以根据具体需求选择合适的动画类型。 ... [详细]
  • 本文详细介绍了利用JavaScript实现图片懒加载的有效方法。通过监听窗口的加载和调整事件,可以显著提升网页性能和用户体验。具体实现包括在 `window.onload`、`window.onresize` 和 `window.onscroll` 事件中动态加载图片,确保只有当图片进入可视区域时才进行加载,从而减少初始加载时间并提高页面响应速度。此外,还提供了一些优化技巧,如使用 Intersection Observer API 来进一步简化代码和提升效率。 ... [详细]
  • 通过使用jQuery库,本文详细介绍了如何实现当鼠标悬停在图标上时,图标自动高亮的动态效果。该技术不仅提升了用户体验,还增强了网页的视觉吸引力。代码示例和详细步骤已提供,方便开发者快速集成到项目中。 ... [详细]
  • 如何巧妙运用米家智能设备实现高效联动与互联互通设置 ... [详细]
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社区 版权所有