簡體   English   中英

使用絕對路徑將文件上傳到 aws S3 存儲桶

[英]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>

手動使用AWSmulter 的節點服務器

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM