如何通过Node.js获取已上传的多部分文件的直接URL

8
我希望将文件发布到多部分表单并将其上传到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链接?

3个回答

9

(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)

接受由fields指定的文件混合。文件数组的对象将被存储在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”的错误。


2
您可以从文件的位置属性中获取它。
res.send(req.file.location);

以这种方式无法获取完整的 URL,它会返回 undefined - turivishal

0

只需使用

req.file.location

在成功响应中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接