gpt4 book ai didi

node.js - 如何在Node中将图像上传到s3

转载 作者:搜寻专家 更新时间:2023-11-01 00:10:23 24 4
gpt4 key购买 nike

将文件从我的 React 前端发布到 Node 后端。

request
.post('/api/upload')
.field('fileName', res.body.text)
.field('filePath', `/${this.s3DirName}`) // set dynamically
.attach('file', data.file)
.end((err2, res2) => {
if (err2){
console.log('err2', err2);
this.setState({ error: true, sending: false, success: true });
}else{
console.log('res2', res2);
this.setState({ error: false, sending: false, success: true });
}

});

然后在我的 Node 后端我想上传到 s3。我正在使用 busboy 来获取发布的多部分文件,然后将 aws sdk 发送到我的 s3 存储桶。

var AWS = require('aws-sdk');

const s3 = new AWS.S3({
apiVersion: '2006-03-01',
params: {Bucket: 'bucketName'}
});

static upload(req, res) {

req.pipe(req.busboy);

req.busboy.on('file', (fieldname, file, filename) => {
console.log("Uploading: " + filename);
console.log("file: ", file);

var params = {
Bucket: 'bucketName',
Key: filename,
Body: file
};

s3.putObject(params, function (perr, pres) {
if (perr) {
console.log("Error uploading data: ", perr);
res.send('err')
} else {
console.log("Successfully uploaded data to myBucket/myKey");
res.send('success')
}
});

});

}

但是我得到错误

Error uploading data:  { Error: Cannot determine length of [object Object]

我直接上传文件对象是正确的还是需要解析它?也许我应该使用 uploadFile 而不是 putObject?

如果有帮助,这是我的 console.logs 的输出,我在其中记录文件和文件名

Uploading: 31032017919Chairs.jpg
file: FileStream {
_readableState:
ReadableState {
objectMode: false,
highWaterMark: 16384,
buffer: BufferList { head: null, tail: null, length: 0 },
length: 0,
pipes: null,
pipesCount: 0,
flowing: null,
ended: false,
endEmitted: false,
reading: false,
sync: true,
needReadable: false,
emittedReadable: false,
readableListening: false,
resumeScheduled: false,
defaultEncoding: 'utf8',
ranOut: false,
awaitDrain: 0,
readingMore: false,
decoder: null,
encoding: null },
readable: true,
domain: null,
_events: { end: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
truncated: false,
_read: [Function] }

最佳答案

引用类似的讨论:Difference between upload() and putObject() for uploading a file to S3?

问题是 s3.putObject 在上传前需要知道 Body 的长度。在您的情况下,它无法确定流的长度(因为它正在流式传输,从一开始就是未知的),因此 s3.upload 更合适。来自文档:

enter image description here

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property

关于node.js - 如何在Node中将图像上传到s3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43460249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com