nodejs 文件到s3的几种方法

s3 是一个很不错的文件存储以及管理系统,很多时候我们简化文件处理(比如大文件或者,需要同步处理的)

参考使用

  • 参考图
    从工具以及代码层面

 

 

  • 简单说明
    工具上,我们可以直接将s3 暴露为一个普通的文件系统(一般都fuse)然后就可以按照标准的文件操作了,可以简单对于s3连接的处理,但是也是有缺点的就是依赖
    底层实现的稳定性
    代码上,可以通过先读取,然后调用s3 api 通过put 写入(先读取完成然后写入)stream pipe 模式(将s3 写入使用writable stream)这样比较高效,还有就是使用union fs 模式,就是将s3 操作包装为一个标准的nodejs fs 接口,通过nodejs 10 之后的pipeline 操作是一个推荐的玩法(主要是安全)
    基于pipe 参考实现
 
const fs = require("fs")
const minio = require("minio")
const stream = require('stream');
let readFs= fs.createReadStream("./app.js")
const  minoClient = new minio.Client(
    {
        endPoint:"127.0.0.1",
        port:9002,
        useSSL:false,
        pathStyle:true,
        accessKey:"minio",
        secretKey:"minio123"
    }
)
// PassThrough 实际上是一个测试常见的stream,但是很好用
var pass = new stream.PassThrough();
minoClient.putObject("cats","appdalong.js",pass)
readFs.pipe(pass)

pipeline 模式

const fs = require("fs")
const minio = require("minio")
const {pipeline,PassThrough} = require('stream');
let readFs = fs.createReadStream("./app.js")
const minoClient = new minio.Client(
    {
        endPoint: "127.0.0.1",
        port: 9002,
        useSSL: false,
        pathStyle: true,
        accessKey: "minio",
        secretKey: "minio123"
    }
)
var pass = new PassThrough();
minoClient.putObject("cats", "appdalong.js", pass)
pipeline(readFs,pass,(err)=>{
    console.log(err,"from pipeline")
})

union fs 模式可以直接使用@hasnat/s3fs (项目比较老了,对于minio 支持不确定,后边测试下)

说明

nodejs 的stream 操作是比较有意思的,而且比较强大

参考资料

https://www.npmjs.com/package/@hasnat/s3fs
https://www.npmjs.com/package/readable-stream
https://www.npmjs.com/package/duplexify
https://www.npmjs.com/package/s3-streams
https://github.com/maxogden/mississippi
https://nodejs.org/docs/latest-v17.x/api/stream.html#class-streampassthrough

posted on   荣锋亮  阅读(511)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-06-03 Lightning Web Components 组件样式(四)
2019-06-03 Lightning Web Components html_templates(三)
2019-06-03 Lightning Web Components 开发指南(二)
2019-06-03 Lightning Web Components 安装试用(一)
2019-06-03 Lightning Web Components 来自salesforce 的web 组件化解决方案
2015-06-03 .net 开源 JavaScript 解析引擎
2014-06-03 sql server CLR

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示