从 AWS-S3 下载文件到本地计算机文件系统
Download a file from AWS-S3 to local computer file system
我使用 api-gateway、aws-lambda 和 s3 bucket 编写了微服务。
我目前能够读取 lambda 函数中的所有文件内容。
但我想将文件从 s3 下载到本地文件系统。
我尝试使用 pipe(localfilepath) 但它抛出有关路径的错误(未找到)。
const AWS = require('aws-sdk');
var s3 = new AWS.S3();
exports.handler = function(event, context, callback) {
var params = {
"Bucket": "bucketname",
"Key": "hello"
};
var readstream = s3.getObject(params).createReadStream();
readstream.on('data',(data) => {
console.log(data)
})
.on('end', () => {
return callback(null, "file read done")
})
.on('error',(e) => {
console.log("Error occured",e)
})
};
如何将文件下载到用户文件系统?
如果用户是指到达您的 API 网关的客户端,那么您不能。想象一下,我会创建一个 Lambda 函数,一旦您访问我的网站,它就会开始向您的计算机加载大量数据。在这种情况下,使 S3 中的对象可下载,并让用户通过向该对象提供 link 来决定是否要下载它。
如果本地文件系统是指 lambda 的本地文件系统,那么您可以访问正在执行 lambda 的容器内的 /tmp
文件夹,但它的大小限制为 500MB,并且它会消失一次容器已被销毁,所以这可能也不是您要找的东西。这在您使用的某些模块在执行期间需要访问文件系统的情况下很有用。
如果您希望允许用户下载文件,但想在 lambda 中执行某些操作或生成 S3 对象的内容,那么您可以使用 getSignedUrl.
它创建临时 url,您可以 return 给您的客户,他们可以下载它。在这种情况下,S3 上不需要 运行 http 服务器。此外,它还支持 ssl 和恢复下载。
我使用 api-gateway、aws-lambda 和 s3 bucket 编写了微服务。 我目前能够读取 lambda 函数中的所有文件内容。 但我想将文件从 s3 下载到本地文件系统。 我尝试使用 pipe(localfilepath) 但它抛出有关路径的错误(未找到)。
const AWS = require('aws-sdk');
var s3 = new AWS.S3();
exports.handler = function(event, context, callback) {
var params = {
"Bucket": "bucketname",
"Key": "hello"
};
var readstream = s3.getObject(params).createReadStream();
readstream.on('data',(data) => {
console.log(data)
})
.on('end', () => {
return callback(null, "file read done")
})
.on('error',(e) => {
console.log("Error occured",e)
})
};
如何将文件下载到用户文件系统?
如果用户是指到达您的 API 网关的客户端,那么您不能。想象一下,我会创建一个 Lambda 函数,一旦您访问我的网站,它就会开始向您的计算机加载大量数据。在这种情况下,使 S3 中的对象可下载,并让用户通过向该对象提供 link 来决定是否要下载它。
如果本地文件系统是指 lambda 的本地文件系统,那么您可以访问正在执行 lambda 的容器内的 /tmp
文件夹,但它的大小限制为 500MB,并且它会消失一次容器已被销毁,所以这可能也不是您要找的东西。这在您使用的某些模块在执行期间需要访问文件系统的情况下很有用。
如果您希望允许用户下载文件,但想在 lambda 中执行某些操作或生成 S3 对象的内容,那么您可以使用 getSignedUrl.
它创建临时 url,您可以 return 给您的客户,他们可以下载它。在这种情况下,S3 上不需要 运行 http 服务器。此外,它还支持 ssl 和恢复下载。