Kha*_*ham 3 javascript file-upload amazon-s3 node.js aws-sdk
我已经编写了一个使用 上传文件到 s3 的函数aws-sdk,但我遇到了问题。
当我替换Body时,Body: "test"该函数将成功执行,我可以test看到s3.
但是我想上传一个文档,例如pdf文件,它无法运行并抛出错误:
UnhandledPromiseRejectionWarning:类型错误 [ERR_INVALID_ARG_TYPE]:“path”参数必须是字符串、缓冲区或 URL 类型之一。在新的 ReadStream (internal/fs/streams.js:99:10) 处的 ReadStream.open (internal/fs/streams.js:110:12) 处的 Object.open (fs.js:406:3) 处接收到类型对象Object.createReadStream (fs.js:1725:10)
这是我的代码:
import { createWriteStream, createReadStream } from "fs";
import AWS from 'aws-sdk';
const fs = require('fs');
const uploadS3 = async ({file}) => {
const { stream, filename} = file;
AWS.config.update({
accessKeyId: '*******',
secretAccessKey: '********',
region: 'us-east-1'
});
let params = {
Bucket: "test-files-staging",
Key: 'documents/' + filename,
Body: fs.createReadStream(file),
ACL: 'public-read'
};
await new AWS.S3().putObject(params).promise().then(() => {
console.log('Success!!!')
}).catch((err) => { console.log(`Error: ${err}`) })
}
Run Code Online (Sandbox Code Playgroud)
提前致谢。
错误非常明显:path参数需要是字符串、缓冲区或 URL,但您传入的对象是 fs.createReadStream 创建的 readStream。
相反,使用该fs.readFileSync函数将文件读入缓冲区(如果使用异步,fs.readFile您将得到一个承诺 - 它既不是字符串、缓冲区也不是 URL,并且将再次失败):
let params = {
Bucket: "test-files-staging",
Key: 'documents/' + filename,
Body: fs.readFileSync(filename), // assuming filename is the full path to your object
ACL: 'public-read'
};
Run Code Online (Sandbox Code Playgroud)
有关功能的更多信息fs可以在文档中找到 -这里
| 归档时间: |
|
| 查看次数: |
3764 次 |
| 最近记录: |