一个使用stream的方式上传文件到aliyun oss的Nodejs模块~~
aliyun-oss-upload-stream
用Aliyun oss 的 Multipart upload API 实现的Node.js模块,通过stream的方式上传文件。
为什么使用stream?
- 使用stream的方式上传文件可以很大程度上降低服务器内存开销。Aliyun官方SDK并没有对stream进行一个完美的封装,所以通常上传文件(Put Object)的流程是客户端上传文件到服务器,服务器把文件数据缓存到内存,等文件全部上传完毕后,一次性上传到Aliyun Oss服务。这样做一旦瞬间上传文件的请求过多,服务器的内存开销会直线上升。而使用stream的方式上传文件的流程是客户端在上传文件数据到服务器的过程中,服务器同时也在把文件数据往Aliyun Oss服务传送,而不需要在服务器上缓存文件数据。
- 可以上传大文件,根据上传数据方式不同而不同, Put Object 方式 文件最大不能超过 5GB,而使用stream的方式,文件大小不能超过 48.8TB
- 更快的速度,由于传统方式(Put Object方式)是客户端上传完毕文件后,统一上传到Aliyun Oss,而stream的方式基本上客户端上传完毕后,服务器已经把一大半的文件数据上传到Aliyun了,所以速度要快很多
- 使用更简单,经过封装后,stream的方式使用起来非常的方便,1分钟就可以学会如何使用
开源地址:https://github.com/berwin/aliyun-oss-upload-stream
刚发布一个1.0.0的版本,欢迎大家提出宝贵的意见,如果大家发现bug或者有什么建议可以提issue,如果靠谱,我会及时更新和发布新版本的~~ 也欢迎大家帮忙一起开发,提交pull request~~
5 回复
@lanyanai 因为使用stream的方式就不需要再服务器保持临时文件。 之前的流程是 client -> server -> server把文件存到server的某个目录为临时文件 -> 服务器读取文件 -> 上传到阿里云 使用stream的流程是 client -> server -> 阿里云 这样能保证上传速度,还能保证不会因为上传文件过大而吃内存。