这里对接的是百度智能云对象存储服务,用的是aws-sdk进行服务对接的,遵照的标准都是AWS S3服务那一套标准。
1、aws s3服务对接的基本配置及操作流程参考博文:https://blog.csdn.net/LegendaryChen/article/details/129775304
2、单个存储文件对象的下载:
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 32 33 34 35 | // 导入依赖 const AWS = require( 'aws-sdk' ); app.get( '/obj' , function (req, res) { // 配置AWS凭证 AWS.config.update({ accessKeyId: process.env.AWS_S3_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_S3_SECRET_ACCESS_KEY, region: process.env.AWS_S3_REGION, endpoint: process.env.AWS_S3_ENDPOINT }); // 初始化S3服务 const s3 = new AWS.S3(); // 图片文件路径和S3存储桶信息 const keyName = "aaa.jpg" ; // 调用S3的putObject方法上传文件 const params = { // 这里的AWS_S3_BUCKET可以包含文件夹路径,比如桶名称是myBucket,myBucket下有一个路径aa // 则这里的AWS_S3_BUCKET可以设置为‘myBucket/aa’,这里获取到的文件就是‘myBucket/aa/aaa.jpg’ Bucket: process.env.AWS_S3_BUCKET, Key: keyName }; s3.getObject(params, function (err, data) { if (err) { console.info( "下载失败: " , err); } else { // 文件名称 res.attachment(params.Key); // 文件类型 res.type(data.ContentType); // 文件内容 res.send(data.Body); console.info( "下载成功: " + bucketName + "/" + keyName); } }); }); |
3、批量文件下载,批量文件下载使用的是s3-zip工具包:
首先下载依赖:npm install s3-zip@^2;注意这里使用的是2.x版本的s3-zip依赖,因为直接使用“npm install s3-zip”下载的版本会有“TypeError: self.s3.send is not a function”错误提示,
具体参考:https://github.com/orangewise/s3-zip/issues/96;具体实现如下:
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 32 33 | const AWS = require( 'aws-sdk' ); const s3Zip = require( 's3-zip' ); app.get( "/batchObj" , function (req, res) { //配置信息 const S3ClientConfig = new AWS.S3({ accessKeyId: process.env.AWS_S3_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_S3_SECRET_ACCESS_KEY, // v4 signatureVersion: process.env.AWS_S3_SIGNATURE_VERSION, s3ForcePathStyle: true , // cn-northwest-1 region: process.env.AWS_S3_REGION, endpoint: process.env.AWS_S3_ENDPOINT }) let files = [ "hello.jpg" , "world.jpg" ]; // 桶下的文件路径 let folder = "/aa/bb/" ; try { s3Zip.archive( { s3: S3ClientConfig, // 注意,这里的bucket不能含有‘/’,只能是桶名称,不能包含文件夹路径 bucket: process.env.AWS_S3_BUCKET }, folder, files ).pipe(res) } catch (error) { console.log(error); res.status(500); } }); |
以上是nodejs对接aws s3进行文件下载简单的功能实现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2021-11-07 分支界限及其案例用途