nodejs, 阿里oss上传下载图片
const archiver = require('archiver')
const send = require('koa-send')
const oss = require('ali-oss').Wrapper
const path = require('path')
const uuid = require('uuid')
const fse = require('fs-extra')
const store = oss({
accessKeyId: 'fdfdffeffjjfjjf',
accessKeySecret: 'fdjfjdfkdjfdkfdjfdjfdjf',
region: `${ossRegin}`
timeout: 120000
})
store.useBucket(`${useBucket}`)
const router = new Router()
1.从oss上打包下载图片
router.get('down', async (ctx, next) => {
const photoKey = await cache.getAsync(ctx.params.key);
if (!photoKey) {
throw {
message: 'file not exists',
router: ctx._url
}
}
const photoObj = JSON.parse(photoKey);
const photoIds = photoObj.photoIds;
const photoInfo = await model.photo.find({
_id: {
$in: photoIds
}
}, {
_id: 0,
'originalInfo.path': 1
})
if (!photoInfo) {
throw {
message: 'photo not exists',
router: ctx._url
}
}
const zipath = `${uuid.v4().replace(/-/g, '')}.zip`;
const output = fse.createWriteStream(zipath);
const zipAchiver = archiver('zip');
for (let photo of photoInfo) {
let photoPath = photo.originalInfo.path;
let photoName = uuid.v1().replace(/-/g, '') + path.extname(photoPath);
const rs = await store.getStream(photoPath);
zipAchiver.append(rs.stream, {
'name': photoName
})
}
zipAchiver.pipe(output);
const fileSize = await fse.stat(zipath);
const size = Math.round(Number(fileSize.size) / 1024 / 1000);
if (size > 300) {
ctx.body = {
maxSize: 300,
size: size
}
return
}
await zipAchiver.finalize();
ctx.set('Content-Type', 'application/zip');
ctx.attachment(zipath);
await send(ctx, zipath);
fse.unlink(zipath);
})
2.上传图片到oss
cosnt fileName =`oss/${yearstr}/${dayStr}/photos/tn/${seconds}.jpg`
const buffer = new Buffer(ctx.req.file,'base64')
const rs = await store.put(fileName, buffer, {
timeout: 120000
})
return rs.name
nodejs, 阿里oss上传下载图片的更多相关文章
- WebService上传下载图片
WebService服务端 接受要上传的图片 public string UploadImg(byte[] fileBytes, int id) { try { string filePath = M ...
- java后台简单从阿里云上传下载文件并通知前端以附件的形式保存
一. 首先开通阿里的OSS 服务 创建一个存储空间在新建一个Bucket 在你新建的bucket有所需的id和key 获取外网访问地址或者是内网 看个人需求 我使用的是外网(内网没用过 估计是部署到阿 ...
- C# webapi 上传下载图片
客户端上传文件 string url = url + "webUploadFile"; Uri server = new Uri(url); HttpClient httpClie ...
- spring boot上传 下载图片。
https://blog.csdn.net/a625013/article/details/52414470 build.gradle buildscript { repositories { mav ...
- 使用阿里云OSS上传文件
本文介绍如何利用Java API操作阿里云OSS对象存储. 1.控制台操作 首先介绍一下阿里云OSS对象存储的一些基本概念. 1.1 进入对象存储界面 登录阿里云账号,进入对象存储界面,如图所示. 进 ...
- JavaWeb 文件上传下载
1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...
- 转载:JavaWeb 文件上传下载
转自:https://www.cnblogs.com/aaron911/p/7797877.html 1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端 ...
- java接受安卓及ios App上传的图片,并保存到阿里OSS
做后台的时候,写了两个方法,分别用来获取安卓和苹果IOS端上传的头像,保存到阿里云OSS图片存储服务器上.(SMM框架) 安卓及H5版本: /** * 上传用户头像 */ @RequestMappin ...
- TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片
**TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片首先我们来看看淘宝的功能和样式:** 之后看看制作完成的演示:(由于全部功能弄成GIF有点大,限制上传大小好像在1M之内,压缩之后也有1.9 ...
随机推荐
- 微信小程序常见的坑
wxml的标签跟html里面的一些标签是一样的,比如view标签相当于div标签,text标签相当于span标签. 在微信小程序中,表单元素都是原生组件,微信小程序中原生组件层级最高,所以在用inpu ...
- JAVA进阶20
1.可视化日历程序(简陋版) package cn.zh.abstrac; import java.text.DateFormat; import java.text.ParseException; ...
- Urban Elevations UVA - 221
题目大意:给出建筑的俯视图,以及每个建筑的左下角坐标,宽度,长度,高度.求正视图可观察到的建筑的编号 思路:建筑物的可见性等于南墙的可见性,依据左下角排序后,逐个判断每个建筑是否可见.对南墙的x坐标进 ...
- OSL
1,SimpleColorShader: shader gamma(color cin = color(,,),output color Cout=color(,,)) { Cout = cin; } ...
- 一个账户接管几乎所有阿里巴巴网站(CSRF漏洞+WAF绕过)
场景 文章是关于某些客户端漏洞导致几个阿里巴巴网站的帐户被接管. 条件 TL;DR 必要条件,例如JSONP,某些浏览器处理cookie等行为. 攻击原理 大多数阿里巴巴的网站加载并执行外部JavaS ...
- typescript解决深度拷贝中循环引用引起的死循环
循环引用有人说就是一种不健康的状态,即你中有我,我中有你 hasObj: any = []; deepCopy(data: any) { this.hasObj.push(data); //最终就是返 ...
- axios 拦截器统一在接口增加时间戳参数,防止走缓存。
request.interceptors.request.use( config => { if (config.method == 'post') { config.data = { ...c ...
- linux下c通过虚拟地址映射读写文件的代码
在代码过程中中,把开发过程中比较好的一些代码片段记录起来,如下的代码内容是关于 linux下c通过虚拟地址映射读写文件的代码,应该对小伙伴有些好处.#include<stdio.h>#in ...
- EtherNet/IP 协议结构
一.Ethernet/IP 协议 将标准的TCP/IP以太网延伸 到工业实时控制并和通用工业协议(CIP)结合,将很好地帮助用户获得更加开放集成的工业自动化和信息化的整体解决方案.EtherNet/I ...
- Django 2.0 与 Django1.0在内部方法上的差异
models.Customer.tags.rel 方法 对于Django1 可以通过 models.Customer.tags.to.model.objects.all() 获取一个model下的Ma ...