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. Tomcat 改端口

    Tomcat 改端口 进入 tomcat 解压包下面的 conf 目录 打开文件 server.xml 找到以下 三处位置,并改为对应端口 1)找到 8005 <Server port=&quo ...

  2. iOS 图片9切

    UIImageView *svRect; UIImage *backgroundImage = [UIImage imageNamed:@"bg.png"]; background ...

  3. kafka单机安装和启动

    1.下载并解压到/usr/local/src目录下 2.运行kafka需要使用Zookeeper,先启动Zookeeper,如果没有Zookeeper,可以使用kafka自带打包和配置好的Zookee ...

  4. SkyReach 团队团队展示

    班级:软件工程1916|W 作业:团队作业第一次-团队展示 团队名称:SkyReach 目标:展示团队风采,磨合团队 队员姓名与学号 队员学号 队员姓名 个人博客地址 备注 221600107 陈某某 ...

  5. 通过hook实现禁止shift+delete快捷键

    实现全局hook必须要将hook代码封装在dll里,所以此程序有两个文件:noShiftDeleteHook.dll和noShiftDelete.exe noShiftDeleteHook.dll / ...

  6. [HTTP]POST报文中Content-Type对正文解析的影响

    概述 在POST请求中,理论上请求端程序可以发送任意格式报文正文,但是最好在报文头Content-Type字段标明正文的格式,方便接收端根据Content-Type正确处理正文. 传统HTML-for ...

  7. juypter4.4.0 自动补全

    python -m pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user --skip ...

  8. Linux定时执行PHP

    1.使用crond服务 crontab -e #编辑任务列表 crontab -l #展示任务列表 26 15 * * * /usr/local/php70/bin/php -q /data/www/ ...

  9. PCB载流你必须知道的那些事儿

    也许大家都知道铜箔走线宽度与电流大小有关,往往都是硬件工程师让你走多少就走多少,但作为Layout工程师你还是要知道你的铜皮走线取值都由什么因素决定?取值多大才能让你安心? PCB的载流能力取决与以下 ...

  10. 关于父窗口获取跨域iframe子窗口中的元素

    这几天在项目中遇到,一个难点, 就是需要异步加载一个pdf插件, 同时又需要获取这个插件中的点击事件来生成用户的下载记录. 刚开始也是想了很多方法,网上搜的 格式1:$("#iframe的I ...