- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在nodejs中编写一个lambda函数,用于将图像上传到S3存储桶。
在我的第一个 lambda 函数中,我已经内联编写了这个函数(直接在 AWS Lambda 编辑器中),并且它运行得非常好。相关代码为:
let decodedImage = Buffer.from(encodedImage, 'base64');
console.log(decodedImage);
console.log(typeof decodedImage);
console.log(Object.prototype.toString.call(decodedImage));
try {
await writeToBucket(decodedImage, 'test.png', 'image/png');
} catch (err) {
console.log(err);
}
async function writeToBucket(data, dbFileId, mimeType) {
return new Promise((resolve, reject) => {
var s3 = new AWS.S3();
const params = {
Bucket : S3_BUCKET,
Key : dbFileId,
Body : data,
ACL: 'public-read',
ContentType: mimeType
}
s3.putObject(params, function(err, dataString) {
if (err) {
reject([503, err]);
} else {
resolve();
}
});
});
三个日志给出:
<Buffer 89 50 4e 47 ... >
object
[object UInt8Array]
因此,如上所述,上述工作正常并且图像已写入存储桶。
现在,我有第二个 Lambda 函数,我在本地编写该函数,并在使用 webpack 构建、压缩和上传后上传到 Lambda。两个 lambda 中的代码相同(如上所述),并且控制台输出也相同。但在第二种情况下上传失败,并出现以下错误:
{ NetworkingError: The "chunk" argument must be one of type string or Buffer. Received type object
at ClientRequest.end (_http_outgoing.js:690:13)
at features.constructor.writeBody (/var/runtime/node_modules/aws-sdk/lib/http/node.js:137:14)
at features.constructor.handleRequest (/var/runtime/node_modules/aws-sdk/lib/http/node.js:105:12)
at executeSend (/var/runtime/node_modules/aws-sdk/lib/event_listeners.js:342:29)
at Request.SEND (/var/runtime/node_modules/aws-sdk/lib/event_listeners.js:356:9)
at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:102:18)
at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)
message:
'The "chunk" argument must be one of type string or Buffer. Received type object',
code: 'NetworkingError',
region: 'eu-west-1',
hostname: 's3.eu-west-1.amazonaws.com',
retryable: true,
time: 2019-08-26T14:25:23.006Z }
据我所知,Body 有效负载确实是 Buffer 类型,但我不明白有什么区别?会不会是 Webpack(或 Babel)搞乱了某些东西?或者它可能与 Nodejs.Buffer 有关吗?我在两个 Lambda 中运行 Node.js 10.x。
我的 Webpack 设置是这样的:
const path = require('path');
require("@babel/register");
require("@babel/plugin-transform-runtime");
const config = {
mode: 'development',
entry: './index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'index.js',
library: 'index',
libraryTarget: 'commonjs2'
},
// Loaders
module: {
rules : [
{ test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" },
{ test: /\.css$/, use: ['style-loader', 'css-loader']}
]
},
// Plugins
plugins: [],
optimization:{
minimize: false
},
externals: {
'aws-sdk': 'aws-sdk'
}
};
// Exports
module.exports = config;
和 package.json 依赖项:
"dependencies": {
"@babel/register": "~7.5.5",
"@babel/runtime": "~7.5.5",
"ajv": "~6.10.2",
"ajv-errors": "~1.0.1",
"css-loader": "~3.2.0",
"style-loader": "~1.0.0",
"uuid": "~3.3.3"
},
"devDependencies": {
"@babel/cli": "~7.5.5",
"@babel/core": "~7.5.5",
"@babel/node": "~7.5.5",
"@babel/plugin-transform-runtime": "~7.5.5",
"@babel/preset-env": "~7.5.5",
"aws-sdk": "~2.517.0",
"babel-loader": "~8.0.6",
"cross-var-no-babel": "~1.2.0",
"mocha": "^6.1.4",
"webpack": "~4.33.0",
"webpack-cli": "~3.3"
}
最佳答案
此错误令人困惑,因为您的代码确实使用 Buffer
作为 Body
并且没有任何可见的 chunk
参数,因此必须是SDK 内部。单独而言,假设 SDK 未正确处理某些内容,并且抛出异常的时间比预期晚得多(例如,不是调用 s3.putObject()
的直接结果,而是稍后,在实际的“工作”开始之后)。
我有一个挥之不去的想法,我在尝试优化其大小以进行分发时读到过有关 AWS SDK 的问题...但我找不到我要找的东西,而且您在 中有它外部
所以也许这是不相关的。
但我确实找到了Bundling Applications with Webpack在哪里SDK v2 的 AWS SDK for JavaScript 开发人员指南中提到了一些可能相关的内容:
You can use webpack to generate bundles that run in Node.js by specifying it as a target in the configuration.
target: "node"
webpack 文档提到这个 "...will compile for usage in a Node.js-like environment (uses Node.js require
to load chunks and not touch any built in modules like fs
or path
)" 。我不清楚这个解释是否包含一个隐藏的金 block ,解释了为什么不包含它会破坏 SDK,或者是否还有其他事情发生......但指定这似乎是解决方案。
如果我推测,我的猜测是,这是通过禁用由 webpack 添加的 Buffer
polyfill 来实现的。
关于node.js - 为什么 s3.putObject 会为 nodejs Buffer 抛出 ERR_INVALID_ARG_TYPE ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57660511/
我正在尝试使用 Node js 服务将 .json 文件的内容获取到 angularjs 方法中。但是我得到以下错误: _http_outgoing.js:700 throw new ERR_INVA
我在服务器上收到一条错误消息:TypeError [ERR_INVALID_ARG_TYPE]:“key”参数必须是字符串类型或 ArrayBuffer、Buffer、TypedArray、DataV
我在输入 node 时遇到了此错误。启动程序。如果这是一个愚蠢的问题,我很抱歉,但我刚刚开始编码。我的代码有什么问题吗? 这是针对一个不和谐的机器人,我还没有在网上看到任何关于这个问题的信息。 con
我使用express框架开发了一个简单的node js登录应用程序。这是我的文件结构: 垃圾箱 www Node 模块 路线 上传 观看次数 app.js 当我尝试运行“npm start”时,它显示
我在 ubuntu 上使用 Node 18.7。我正在尝试将一堆 csv 文件解析为对象(使用 csv-parse),最终加载到数据库中。因为有很多这样的我决定尝试流,我想使用异步等待风格。 基于 U
当我的 Discord 机器人尝试在语音 channel 中播放 MP3 文件时遇到错误。 我的代码: if(message.member.voiceChannel){ const c
节点:v14.0.0 CLI 版本:2.3.2 GitBook 版本:3.2.3 视窗10 执行时 gitbook init在一个空文件夹中,它弹出: $ gitbook init warn: no
最近,我在尝试使用 NodeJS 和 request-promise 发出请求时遇到了问题. 以下代码嵌套在用于文件上传的 multer 调用中(使用嵌套函数/集群。 const option
嗨,我正在尝试按照Electron上的教程进行操作,但是尝试从我创建的菜单中打开文件时,我一直收到此错误。 未捕获的异常: TypeError [ERR_INVALID_ARG_TYPE]:“path
我这里有这个小问题: events.js:200 throw new errors.ERR_INVALID_ARG_TYPE('listener', 'Function', listener); ^
我正在尝试在本地计算机中运行 react 应用程序,运行时出现此错误npm 运行开始: > node scripts/start.js internal/validators.js:125 t
我正在使用 React 开发一个项目,遇到了一个让我困惑的问题。 每当我运行yarn start时,我都会收到此错误: TypeError [ERR_INVALID_ARG_TYPE]: The "p
尝试创建使用 webpack 捆绑的 JavaScript lambda。我当前的index.js 的结构如下: const AWS = require('aws-sdk'); const fs =
在下面的代码中,我得到了这个错误: TypeError [ERR_INVALID_ARG_TYPE]: The "original" argument must be of type Function
npm start 每当使用 ^2.0.0 版本的 mountebank 运行 mountebank 服务器时都会出现错误 TypeError [ERR_INVALID_ARG_TYPE]: The
我正在nodejs中编写一个lambda函数,用于将图像上传到S3存储桶。 在我的第一个 lambda 函数中,我已经内联编写了这个函数(直接在 AWS Lambda 编辑器中),并且它运行得非常好。
我正在尝试创建一个文件夹 view/circle,我将能够在其中渲染数组,但是当我执行 localhost:3001/views/circle 时,没有加载任何内容,而是在标题上收到错误... ...
我已经为此奋斗了一段时间。当我去运行npm run dev我收到下面列出的错误。我可以运行 webpack -mode dev它工作。不过,它会将输出直接放入我的 dest 目录中。这里是 GitHu
我们的构建环境目前使用 Node 12.19.0 和 npm 6.14.8。当我看到 Node 14.15.1(仍然是 npm 6.14.8)的新 LTS 版本可用时,我下载了它并运行了我们的 web
我被困在这里了一段时间我不明白这个问题。请有人在这个主题上启发我。这是代码。 const puppeteer = require('puppeteer'); (async() => { let
我是一名优秀的程序员,十分优秀!