koa2使用阿里云oss的nodejs sdk实现上传图片
nodejs实现上传图片到阿里云,自然是写成接口形式比较方便,前端监听input file的改变,把file对象传入到formData中传入后端,不能直接传入file对象,后端需要接受formData
其他中间件推荐:
上传单张:
最终找到了github上一个朋友用formidable写的,非常好用,代码戳这里
我根据该文件实现了上传图片的代码如下:
nodejs文件:
exports.uploadFile = async (ctx,next) => {
let alioss_uploadfile = function() {
return new Promise(function(resolve, reject) {
//上传单文件,使用formidable
let form = new formidable.IncomingForm()
form.parse(ctx.req, function(err, fields, files) {
if (err) { ctx.throw('500',err)}
// 文件名
let date = new Date()
let time = '' + date.getFullYear() + (date.getMonth() + 1) + date.getDate()
let filepath = 'project/'+time + '/' + date.getTime()
let fileext = files.file.name.split('.').pop()
let upfile = files.file.path
let newfile = filepath + '.' + fileext
//ali-oss
co(function*() {
client.useBucket('p-adm-test')
let result = yield client.put(newfile, upfile)
console.log('文件上传成功!', result.url)
let data=[]
data.push(result.url)
ctx.response.type = 'json'
ctx.response.body = {
errno: 0,
data: data
}
resolve(next())
}).catch(function(err) {
console.log(err)
})
})
})
}
await alioss_uploadfile()
}
但是发现这个中间件只支持上传单文件,如果上传多文件,需要multiparty中间件
上传多张:
参考链接:https://www.cnblogs.com/wuwanyu/p/wuwanyu20160406.html
我实现的代码:
exports.uploadFile = async (ctx,next) => {
let alioss_uploadfile = function() {
return new Promise(function(resolve, reject) {
//上传多文件,使用multiparty
let form = new multiparty.Form({
encoding: 'utf-8',
keepExtensions: true //保留后缀
})
form.parse(ctx.req, async function (err, fields, files) {
let data=[]
for(let f of files.file){
// 文件名
let date = new Date()
let time = '' + date.getFullYear() + (date.getMonth() + 1) + date.getDate()
let filepath = 'project/'+time + '/' + date.getTime()
let fileext = f.originalFilename.split('.').pop()
let upfile = f.path
let newfile = filepath + '.' + fileext
await client.put(newfile, upfile).then((results) => {
console.log('文件上传成功!', results.url)
data.push(results.url)
}).catch((err) => {
console.log(err)
})
}
ctx.response.type = 'json'
ctx.response.body = {
errno: 0,
data: data
}
resolve(next())
})
})
}
await alioss_uploadfile()
}
这里有个for循环,多次执行的阿里云sdk,把返回的链接push到data数组里,最后返回,如果像上边一样用co实现,则最终
ctx.response.body
返回的data只有第一张图片的url,之后的并不能返回,应该是异步问题导致,这里自己学的还不精通,不明白其中解决办法和原理,期望有大神可以解惑!!!感激不尽!!
问题描述在这里===》https://segmentfault.com/q/1010000015425832
如果使用了koa2-multiparty中间件,则函数中的参数files获取不到,而是直接通过ctx.req.files获取传过来的file列表
koa2-multiparty: https://www.npmjs.com/package/koa2-multiparty
我的代码地址:https://github.com/beileixinqing/aliyun-oss-upload
koa2使用阿里云oss的nodejs sdk实现上传图片的更多相关文章
- 使用visual studio 2015调用阿里云oss .net sdk 2.2的putobject接口抛出outofmemory异常
问题描述: 使用阿里云oss .net sdk 2.2版本,使用putobject接口上传文件时,抛出outofmemory异常. 原因分析: 上传时,用于准备上传的数据缓冲区内存分配失败.与应用软件 ...
- iOS使用阿里云OSS对象存储 (SDK 2.1.1)
最近项目中用到了阿里云OSS对象存储,用来存储APP中图片.音频等一些数据.但坑爹的阿里云居然在11月20日将SDK版本更新到了2.1.1,然而网上给出的教程都是1.*版本的(针对iOS),两个版本所 ...
- thinkphp使用阿里云OSS最新SDK,文件部署
这文章是建立在你已经注册号阿里云的OSS,和创建好Bucket前提下: 其实阿里云的帮助与文档写的很详细,这里只说一下源码方式 1.phpsdk下载地址(摘自阿里云OSS的帮助与文档)(也有我自己下载 ...
- 快速上手阿里云oss SDK
使用阿里云oss SDK 依赖安装: pip install oss2 pip install aliyun-python-sdk-sts 版本最好是 2.7.5 或以上 如果要开启 crc64 循环 ...
- 前端(react)上传到阿里云OSS存储 实例
需求背景 由于现有的后台管理系统,上传的视频越来越大,加上上传视频较慢,后端小哥提出直接从前端上传视频或者其他文件到阿里云OSS存储. 阿里云OSS 阿里云OSS文档介绍,这里不做过多赘述 安装 原本 ...
- phpcmsv9 阿里云OSS云存储整合教程
该教程算不上是phpcmsv9阿里云oss插件,所以整个修改及其代码覆盖前请一定记得备份.还有一点就是后台发布文章时上传的附件还是会保存在你的服务器上,基于以下原因:1.个人的需求是前台页面需要使用t ...
- 阿里云oss上传图片
1.首先我们要下载阿里云oss的sdk包:(可以下载原版的,改过的通用版在本人的百度云,嘎嘎嘎~) 2.下载好之后放到项目文件目录里面 3.要在需要的控制器引用这个sdk文件例如: include(& ...
- (转)云存储:阿里云OSS 、又拍云和 七牛 的比较
阿里OSS:好处就是,那是一套完整的体系,存储,数据库,CDN,服务器,阿里都可以给你全包.缺点,费用对于没有盈利的网站来说太高了,好像定位就是给那些高端客户使用的,而且CDN,OSS的流量是分开收费 ...
- laravel下使用阿里云oss上传图片
对小公司而言,使用阿里云oss比直接买硬盘要划算的多,不管从存储性价比上还是从网速负载上.最近因为公司的项目有比较大的图片存储访问需求,所以决定使用阿里云的oss. 在研究了一下以后,摆着不自己造轮子 ...
随机推荐
- tongjiword,write / read file demo
1.tong ji letter demo mport sys def tongjiword(): fi =open(paht,'r') cont=fi.read() wl={} for line i ...
- iOS five years[转]
原文链接:http://blog.ayaka.me/post/127980091987/5-years This morning, I got a push notification from Tim ...
- # Writing your first Django app--part 3 about view
添加更多的view 写actually有用的view 使用模版来设计view 使用模版设计view的捷径:render() 抛出异常404 抛出异常404-快捷方法: get_object_or_40 ...
- NETCONF+Yang配置TSN
NETCONF用来替换SNMP,是一个网管协议.YANG是NETCONF的数据建模语言,可以使用Yang模式的文本配置网关,从而通过NETCONF协议管理网关. NETCONF+Yang可用于TSN( ...
- OpenCV 图像处理的各种滤镜效果实现
引自:https://blog.csdn.net/column/details/stylizefliter.html 学习OpenCV:滤镜系列(15)——羽化(模糊边缘) 在PHOTOSHOP里,羽 ...
- Sahi (1) —— 快速入门(101 Tutorial)
Sahi (1) -- 快速入门(101 Tutorial) jvm版本: 1.8.0_65 sahi版本: Sahi Pro 6.1.0 参考来源: Sahi官网 Sahi Quick Tutori ...
- jquery ajax 无刷新上传
var form = new FormData(); form.append('file', $("#submitmaterials").find("input" ...
- String.valueOf 的坑
一个方法返回 null,如果使用 String.valueOf() 进行转换,则会将 null 转为字符串 "null". 前者是个空类型,后者则是包含四个字母(n,u,l,l)的 ...
- SpringCloud 天气预报系统 Quartz集成
https://blog.csdn.net/csdn_wangchen/article/details/79402097 继上一次的redis集成后,有了很大的改观,但是缺少数据的同步.------& ...
- 在ASP.NET CORE下生成PDF文档
原文链接:https://www.c-sharpcorner.com/article/creating-pdf-in-asp-net-core-mvc-using-rotativa-aspnetcor ...