gpt4 book ai didi

node.js - 使用 aws-sdk 和 Node/Express 将文件简单上传到 S3

转载 作者:IT老高 更新时间:2023-10-28 21:55:47 25 4
gpt4 key购买 nike

我不知道自己做错了什么,这就是我所拥有的:

HTML

<html>
<body>
<form method="POST" action="/upload" enctype="multipart/form-data">
<div class="field">
<label for="image">Image Upload</label>
<input type="file" name="image" id="image">
</div>
<input type="submit" class="btn" value="Save">
</form>
</body>
</html>

Port 5000 是我的 Node.js 服务器的端口。

在这个例子中,我使用 POST/upload,它工作正常。

module.exports = function(app, models) {

var fs = require('fs');
var AWS = require('aws-sdk');
var accessKeyId = process.env.AWS_ACCESS_KEY || "xxxxxx";
var secretAccessKey = process.env.AWS_SECRET_KEY || "+xxxxxx+B+xxxxxxx";

AWS.config.update({
accessKeyId: accessKeyId,
secretAccessKey: secretAccessKey
});

var s3 = new AWS.S3();

app.post('/upload', function(req, res){

var params = {
Bucket: 'makersquest',
Key: 'myKey1234.png',
Body: "Hello"
};

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

}

现在我想发布我正在 POST 处理的文件,这就是问题所在。

module.exports = function(app, models) {

var fs = require('fs');
var AWS = require('aws-sdk');
var accessKeyId = process.env.AWS_ACCESS_KEY || "xxxxxx";
var secretAccessKey = process.env.AWS_SECRET_KEY || "+xxxxxx+B+xxxxxxx";

AWS.config.update({
accessKeyId: accessKeyId,
secretAccessKey: secretAccessKey
});

var s3 = new AWS.S3();

app.post('/upload', function(req, res){
var path = req.files.image.path;
fs.readFile(path, function(err, file_buffer){
var params = {
Bucket: 'makersquest',
Key: 'myKey1234.png',
Body: file_buffer
};

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

我得到的错误是:

TypeError: Cannot read property 'path' of undefined

事实上 files 完全是空的。

我假设我遗漏了一些非常明显的东西,但我似乎找不到它。

最佳答案

您将需要类似 multer 的东西来处理分段上传。这是使用 aws-sdk 将文件上传到 s3 的示例。

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

var accessKeyId = process.env.AWS_ACCESS_KEY || "xxxxxx";
var secretAccessKey = process.env.AWS_SECRET_KEY || "+xxxxxx+B+xxxxxxx";

AWS.config.update({
accessKeyId: accessKeyId,
secretAccessKey: secretAccessKey
});

var s3 = new AWS.S3();

app.use(multer({ // https://github.com/expressjs/multer
dest: './public/uploads/',
limits : { fileSize:100000 },
rename: function (fieldname, filename) {
return filename.replace(/\W+/g, '-').toLowerCase();
},
onFileUploadData: function (file, data, req, res) {
// file : { fieldname, originalname, name, encoding, mimetype, path, extension, size, truncated, buffer }
var params = {
Bucket: 'makersquest',
Key: file.name,
Body: data
};

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

app.post('/upload', function(req, res){
if(req.files.image !== undefined){ // `image` is the field name from your form
res.redirect("/uploads"); // success
}else{
res.send("error, no file chosen");
}
});

关于node.js - 使用 aws-sdk 和 Node/Express 将文件简单上传到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17930204/

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