![](/img/trans.png)
[英]How to upload a file to S3 bucket with axios using React and a presigned using aws-sdk?
[英]Upload file to aws S3 bucket using absolute path
我正在嘗試將文件從 Express ejs 上傳到 AWS s3 存儲桶我成功地這樣做了但是當我嘗試從我的 index.js 所在的其他目錄或文件夾之外的其他目錄或文件夾中的 select 文件時它不接受該文件並拋出錯誤文件未找到。
index.js
'use strict';
const express = require('express');
const app = express();
const multer = require('multer');
const multerS3 = require('multer-s3');
const AWS = require('aws-sdk');
const bodyParser = require('body-parser');
const s3 = new AWS.S3({
accessKeyId: '',
secretAccessKey: ''
});
app.use(bodyParser.urlencoded({extended : true}));
app.set('view engine', 'ejs');
const uploadS3 = multer({
storage: multerS3({
s3: s3,
bucket: '',
metadata: (req, file, cb) => {
cb(null, {fieldName: file.fieldname})
},
key: (req, file, cb) => {
cb(null, Date.now().toString() + '-' + file.originalname)
}
})
});
測試.ejs
<html>
<form method="post" action="/upload">
<input type="file" name="file" />
<input type="submit" />
</form>
</html>
路由.js
var fileupload = require('../../common/service/file-upload');
//some code in between
app.post('/upload', fileupload.uploadS3.single('file'),(req, res) => {
console.log(req.file);
});
伙計,Express 如何通過路徑讀取客戶的文件? 文件在 POST 請求中上傳/發送。
使用一些支持multipart/form-data
文件上傳的正文解析器,如mutler ,從請求中解析文件並將其上傳到 S3。
例如...
html
<html>
<!-- don't forget enctype parameter -->
<form method="post" action="/upload" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" />
</form>
</html>
const multer = require('multer'),
AWS = require('aws-sdk'),
S3 = new AWS.S3({
...
});
router.post('/', multer().single('file'), (req, res) => {
// debug req.file
console.log(req.file);
S3.upload({
Bucket: '...',
Key: req.file.originalname,
Body: req.file.buffer
}, (err, res) => {
if (err) throw err;
res.json({
message: "File uploaded to S3"
});
});
});
使用multer-s3的節點服務器
const multer = require('multer'),
multerS3 = require('multer-s3'),
AWS = require('aws-sdk'),
S3 = new AWS.S3({
...
});
let upload = multer({
storage: multerS3({
s3: s3,
bucket: '...',
key: (req, file, cb)
=> cb(null, file.originalname), // or whatever Key you like
})
});
router.post('/', upload.single('file'), (req, res) => {
res.json({
message: "File uploaded to S3"
});
});
每當您上傳文件時,您需要將屬性添加到表單 enctype="multipart/form-data"。 .然后它會工作。 將文件上傳到 s3 使用 multer-s3 package 配置簡單參考: https://www.npmjs.com/package/multer-s3
所以你的 test.ejs 文件會是這樣的
<html>
<form method="post" action="/upload" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" />
<const/form>
</html>
和 index.js
const express = require('express');
const bodyParser = require('body-parser');
const AWS = require('aws-sdk');
const multer = require('multer')
const multerS3 = require('multer-s3')
const app = express();
const s3 = new AWS.S3({
accessKeyId: //aws access key ,
secretAccessKey: //aws secret key
});
const upload = multer({
storage: multerS3({
s3: s3,
bucket: 'some-bucket',
metadata: function (req, file, cb) {
cb(null, {fieldName: file.fieldname});
},
key: function (req, file, cb) {
cb(null, Date.now().toString())
}
})
})
app.post('/', upload.single('file'), (req, res) => {
res.json({
message: "File uploaded to S3"
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.