javascript - 如何在 lambda 中使用 S3 存储桶签名 URL 读取 excel 数据?
问题描述
我有一个文件存储在 s3 存储桶中并编写了 lambda 函数来给我们签名的 URL,然后尝试使用 xlsx 从签名的 URL 中读取数据。但是它不起作用,下面是代码:
exports.handler = (event, context, callback) => {
var params = {
Bucket: "abc",
Key: "xyz.xls"
};
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
var url = s3.getSignedUrl('getObject', params, function(err,data){
if(err){
console.log(err, err.stack);
callback(err,null);
}else{
var XLSX = require('xlsx')
var workbook = XLSX.readFile(data);
var sheet_name_list = workbook.SheetNames;
var xlData = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[2]]);
var res = {
statusCode:200,
body:JSON.stringify(xlData)
}
callback(null,res);
}
});
};
它无法读取文件。找不到文件错误它甚至会在浏览器中引发相同的 URL 炒锅。谢谢
解决方案
看起来你需要这样的东西:
var XLSX = require('xlsx'), request = require('request');
request(url, {encoding: null}, function(err, res, data) {
if(err || res.statusCode !== 200) {
callback(err,null);
return;
}
/* data is a node Buffer that can be passed to XLSX.read */
var workbook = XLSX.read(data, {type:'buffer'});
var sheet_name_list = workbook.SheetNames;
var xlData = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[2]]);
var res = {
statusCode:200,
body:JSON.stringify(xlData)
}
callback(null,res);
});
推荐阅读
- javascript - 在 VueJS 上仅使用 Javascript 将数据从子级传递给父级
- jmeter - 在 Jmeter 中循环
- python - 如何在本地使用 Pycharm + Jupyter 从集群访问数据?
- ios - @Published 属性包装器不适用于 ObservableObject 的子类
- perl - 如何在@INC 之外导入不以.pm 结尾的perl 模块?
- sql - 有条件地计算一行中的项目
- clojure - 在 clojure 中同时使用 assoc 和 dissoc 转换地图
- if-statement - 相同的公式不同的行为
- javascript - 如何根据目录结构和文件创建嵌套对象
- batch-file - 在 CMD 中将 %0 读取为 %0