這里對接的是百度智能云對象存儲服務,用的是aws-sdk進行服務對接的,遵照的標準都是AWS S3服務那一套標準。
1、aws s3服務對接的基本配置及操作流程參考博文:https://blog.csdn.net/LegendaryChen/article/details/129775304
2、單個存儲文件對象的下載:
// 導入依賴
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;具體實現如下:
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進行文件下載簡單的功能實現。
浙公網安備 33010602011771號