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上传下载图片的更多相关文章

  1. WebService上传下载图片

    WebService服务端 接受要上传的图片 public string UploadImg(byte[] fileBytes, int id) { try { string filePath = M ...

  2. java后台简单从阿里云上传下载文件并通知前端以附件的形式保存

    一. 首先开通阿里的OSS 服务 创建一个存储空间在新建一个Bucket 在你新建的bucket有所需的id和key 获取外网访问地址或者是内网 看个人需求 我使用的是外网(内网没用过 估计是部署到阿 ...

  3. C# webapi 上传下载图片

    客户端上传文件 string url = url + "webUploadFile"; Uri server = new Uri(url); HttpClient httpClie ...

  4. spring boot上传 下载图片。

    https://blog.csdn.net/a625013/article/details/52414470 build.gradle buildscript { repositories { mav ...

  5. 使用阿里云OSS上传文件

    本文介绍如何利用Java API操作阿里云OSS对象存储. 1.控制台操作 首先介绍一下阿里云OSS对象存储的一些基本概念. 1.1 进入对象存储界面 登录阿里云账号,进入对象存储界面,如图所示. 进 ...

  6. JavaWeb 文件上传下载

    1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...

  7. 转载:JavaWeb 文件上传下载

    转自:https://www.cnblogs.com/aaron911/p/7797877.html 1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端 ...

  8. java接受安卓及ios App上传的图片,并保存到阿里OSS

    做后台的时候,写了两个方法,分别用来获取安卓和苹果IOS端上传的头像,保存到阿里云OSS图片存储服务器上.(SMM框架) 安卓及H5版本: /** * 上传用户头像 */ @RequestMappin ...

  9. TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片

    **TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片首先我们来看看淘宝的功能和样式:** 之后看看制作完成的演示:(由于全部功能弄成GIF有点大,限制上传大小好像在1M之内,压缩之后也有1.9 ...

随机推荐

  1. 2、jQuery的Ajax简单示例

    一.创建一个JavaWEBProject 二.创建一个Servlet(下面的例子中用到了Json--第32行,Json的作用是将一个Object类转换为特定格式的字符串,如果不用Json直接返回字符串 ...

  2. idea2017.2.2注册

    IntelliJ IDEA 2017.2 破解(注册) 2017年08月10日 11:13:45 筱进GG 阅读数:2849更多 个人分类: IntelliJ IDEA   下载IntelliJ ID ...

  3. UOJ #310「UNR #2」黎明前的巧克力

    神仙题啊... UOJ #310 题意 将原集合划分成$ A,B,C$三部分,要求满足$ A,B$不全为空且$ A$的异或和等于$ B$的异或和 求方案数 集合大小 $n\leq 10^6$ 值域$v ...

  4. windows上安装zip版mongodb

    版本3.4:现将mongodb解压,再选择一个位置创建data文件夹并在其下创建db文件夹和log文件夹 然后编写mongod.cfg文件,注意这里用的yaml格式,对空格很敏感,并且要注意mongo ...

  5. Python学习笔记-CGI编程(如何在IIS上挂Python开发的Webservice)

    一.如何用Python开发一个简单的Webservice 利用python的cgi编程,可以传入参数将结果输出. 定义需要编码以及需要引用的模块 #conding=utf-8 #修正中文乱码 impo ...

  6. 51nod 2513

    写代码的时候抄错变量,晕! 另外有个while循环条件错的,因为两个指针必须都要有终止条件 代码: #include<iostream> #include<cstdio> #i ...

  7. HikariCP Druid比较

    HikariCP Github地址: https://github.com/brettwooldridge/HikariCP HikariCP是数据库连接池,而且是号称史上最快的, SpringBoo ...

  8. pwnable.tw hacknote

    产生漏洞的原因是free后chunk未置零 unsigned int sub_80487D4() { int index; // [esp+4h] [ebp-14h] char buf; // [es ...

  9. GCD nyoj 1007 (欧拉函数+欧几里得)

    GCD  nyoj 1007 (欧拉函数+欧几里得) GCD 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 The greatest common divisor ...

  10. .Net Core---- WebApi生成Swagger接口文档

    1. Swagger是什么? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件 ...