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

 



推荐阅读
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 家装日记六:家具采购和瓷砖选择
    本文记录了作者进行家装的过程,包括家具采购和瓷砖选择。作者介绍了自己家的装修风格以及选择烤漆家具和红白系列的原因。作者还提到了装修风格以简约为主,不可以太花哨的要求。最后,作者提到了价格较贵的问题。 ... [详细]
  • 本文讨论了当某位排位靠前的涉众提供了一张精美的界面图片时,是否可以将其作为设计约束。同时还探讨了高质量素材和愿景之间的关系,以及老大自身的软件方法和建模技能。 ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • 本文研究了使用条件对抗网络进行图片到图片翻译的方法,并提出了一种通用的解决方案。通过学习输入图像到输出图像的映射和训练相应的损失函数,我们可以解决需要不同损失函数公式的问题。实验证明该方法在合成图片、重构目标和给图片着色等多个问题上都很有效。这项工作的重要发现是不再需要人为构建映射函数和损失函数,同时能够得出合理的结果。本文的研究对于图片处理、计算机图片合成和计算机视觉等领域具有重要意义。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • github上_idea上传本地项目到github上(图解)
    本文由编程笔记#小编为大家整理,主要介绍了idea上传本地项目到github上(图解)相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了优化算法改进的侏儒猫鼬优化算法(IDMO)及其Matlab源码分享。文章首先介绍了获取代码的两种方式,包括付费下载和付费订阅付费专栏。然后详细解释了侏儒猫鼬优化算法的原理和特点,以及其在集体觅食、侦察和保姆交换等方面的应用。最后提供了CSDN资源下载链接,供读者下载相关代码。 ... [详细]
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社区 版权所有