node.js - 如何将 .wav 从 lambda 函数中的 URL 保存到 s3 存储桶
问题描述
我有一个 .wav 文件的网址。我想将它从 Lambda 函数保存到 S3 存储桶。我必须先下载它吗?
最好的方法是什么?
exports.handler = async (event) => {
// imports
const fs = require('fs');
const AWS = require('aws-sdk');
AWS.config.update({ region: process.env.REGION || 'us-east-1' })
const s3 = new AWS.S3();
// get URL
const body = parseBody(event['body']);
const url = body.url;
// download file?
// HOW TO DO THIS using async?
const file_name = magic_save(url)
// upload to S3
var bucketName = `some_bucket`;
var keyName = 'audio.wav';
const fileContent = fs.readFileSync(file_name);
var params = { 'Bucket': bucketName, 'Key': keyName, 'Body': fileContent };
try {
console.log('saving...');
const data = await s3.putObject(params).promise();
console.log("Successfully saved object to " + bucketName + "/" + keyName);
} catch (err) {
console.log('err');
console.log(err);
};
解决方案
最好是像这样将文件直接流式传输到 s3
const got = require("got");
const aws = require("aws-sdk");
const s3Client = new aws.S3();
const Bucket = 'somebucket';
const Key = "some/audio.wav";
exports.handler = async (event) => {
// get URL
const body = parseBody(event['body']);
const url = body.url;
const stream = got.stream(url);
const response = await s3Client.upload({Bucket, Key, Body: stream}).promise();
console.log(response);
};
推荐阅读
- java - Java通过调整元素大小来调整布局
- java - 如何让我的程序在我的子类而不是父类中运行验证代码?
- python - 如何在熊猫数据透视表函数中重复行标签并将其导出为excel
- reactjs - 使用 ThreeJS/FIber 从远程 URL 加载模型
- python - 循环遍历数据框并为每个用户组填充 url 请求
- google-analytics - 谷歌分析重复交易
- java - Java 代码清理实用程序 if 语句
- javascript - 在处理中转置数组列表
- python - 为什么我的尝试/除了没有为 csv 文件提供任何值?
- asp.net-mvc-4 - 引导工具提示未显示在 ASP.Net MVC 应用程序中