【问题标题】:How to get direct URL to multipart file uploaded via Node.js如何获取通过 Node.js 上传的多部分文件的直接 URL
【发布时间】:2020-03-22 01:48:00
【问题描述】:

我希望将文件发布到多部分表单并将其上传到 Amazon S3 存储桶并返回文件的用户链接。

const express = require('express'),
    aws = require('aws-sdk'),
    bodyParser = require('body-parser'),
    multer = require('multer'),
    multerS3 = require('multer-s3');

aws.config.update({
    secretAccessKey: 'secret',
    accessKeyId: 'secret',
    region: 'us-east-2'
});

const app = express(),
    s3 = new aws.S3();

app.use(bodyParser.json());

const upload = multer({
    storage: multerS3({
        s3: s3,
        bucket: 'some-name',
        key: (req, file, cb) => {
            console.log(file);
            cb(null, file.originalname); //use Date.now() for unique file keys
        }
    })
});

app.post('/upload', upload.array('file',1), (req, res, next) => {
    res.send("How to return File URL?");
});

app.listen(3000);

如何获得文件的直接 URL?

【问题讨论】:

    标签: node.js express amazon-s3 multer multer-s3


    【解决方案1】:

    (Multer NPM) 已经在文档中写了:

    .single(fieldname)     => (req.file)

    接受名称为 fieldname 的单个文件。单个文件将存储在 req.file 中。

    app.post('/upload', upload.single('file'), (req, res, next) => {
        console.log('Uploaded!');
        res.send(req.file);
    });
    

    .array(fieldname[, maxCount])     => (req.files)

    接受一个文件数组,所有文件的名称都为 fieldname。如果上传的文件超过 maxCount 个,则可以选择出错。文件数组将存储在 req.files 中。

    app.post('/upload', upload.array('file', 1), (req, res, next) => {
        console.log('Uploaded!');
        res.send(req.files);
    });
    

    .fields(fields)     => (req.files)

    接受由字段指定的混合文件。包含文件数组的对象将存储在 req.files

    app.post('/upload', upload.fields([
      { name: 'avatar', maxCount: 1 },
      { name: 'gallery', maxCount: 8 }
    ]), (req, res, next) => {
        console.log('Uploaded!');
        res.send(req.files);
    });
    

    .any()     => (req.files)

    接受通过网络传输的所有文件。文件数组将存储在 req.files 中。

    .none()

    仅接受文本字段。如果进行任何文件上传,将发出代码“LIMIT_UNEXPECTED_FILE”的错误。

    【讨论】:

    • 有什么办法可以获取上传的对象url作为回报吗?
    • @Deepak BTW 这是您问题的答案,您将进入文件对象file.location
    • @Turivishal- 这就是我实施的方式。请参阅我的问题stackoverflow.com/questions/63358933/…
    【解决方案2】:

    你可以从文件的位置属性中得到它。

    res.send(req.file.location);
    

    【讨论】:

    • 这种方式没有得到完整的url,它返回undefined
    【解决方案3】:

    随便用

    req.file.location

    在成功响应中

    【讨论】:

      猜你喜欢
      • 2018-08-06
      • 2019-12-31
      • 2015-09-25
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      相关资源
      最近更新 更多