node.js - 使用 lambda (node.js) + puppeteer 到 .fetch() Excel 文件并写入 S3,文件格式错误
问题描述
我正在点击 Excel 文件的 OneDrive/Sharepoint 共享链接,尝试将其下载并保存到 S3。
CSV确实有效;.xlsx 没有
我正在使用 Puppeteer,所以代码看起来像这样:
var downloadURL = "https://netorgft7979143-my.sharepoint.com/:x:/g/personal/gabe_scoop_report/ETCqa1EwxrVNiPYD0aLIq44BJUpEFLYIhcKOFWXuNnYPXQ?download=1"
const buffer = await page.evaluate(({downloadURL}) =>
{
return fetch(downloadURL, {
method: 'GET'
}).then(r => r.text());
}, {downloadURL});
...
const s3result = await s3
.upload({
Bucket: S3BucketPath,
Key: `${Date.now()}.csv`,
Body: buffer,
ContentType: 'text'})
.promise()
同样,当端点是 CSV 时,这完全有效。当它是 Excel 文件时,这些位会写入 S3;但是,不是有效的 Excel文件。
上面的 URL 是真实的(示例数据,请随意点击),如果您运行此代码,您将看到写入 S3 的 11k 文件,但 Excel 会抱怨格式无效。
我 99%+ 确信它与二进制与文本有关,并且花了 2 天时间研究 SO,尝试从 base64 转换到 .blob() 或 .buffer()、S3 的不同内容类型……但没有任何作用。我也 99%+ 确定 Puppeteer 与问题无关,将 .fetch() 包装在 page.evaluate() 中确实使then(r => r.buffer())
抱怨缓冲区不是函数之类的事情变得更加困难......
想法?谢谢!
解决方案
推荐阅读
- highcharts - 如何在散点图上添加穿过原点(从正到负)的线 - highchart
- c# - 从另一个控制器创建指向控制器的 url 链接
- android - ionic build cordova android 给出错误“UnhandledPromiseRejectionWarning: Error: cmd: Command failed with exit code 1”
- css - 在导致输入大小变化的表单错误上添加边框
- r - 按不同的值删除一行
- c# - MVC 搜索功能实现
- c# - struct INotifyPropertyChanged 不适用于 ctor
- php - 在 mySQL 中按 BLOB 图像搜索
- reactjs - 用于反应前端的基于令牌的身份验证
- java - 在已创建的对象上使用“new”语句会导致内存泄漏吗?