Как получить прямой URL-адрес для составного файла, загруженного через Node.js

Я хочу отправить файл в составную форму, загрузить его в Amazon S3 Bucket и вернуться к пользовательской ссылке на файл.

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-адрес файла?

См. также:  Я не могу запустить простой код с помощью pyaudio - [Errno -9996] Недопустимое устройство вывода (нет устройства вывода по умолчанию)
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 3
  1. 0x77dev

    Вы можете получить его из свойства местоположения файла.

    res.send(req.file.location);
    

    Не получая таким образом полного URL-адреса, возвращается undefined. person 0x77dev; 08.06.2020

  2. 0x77dev

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

    .никто()

    Принимайте только текстовые поля. При загрузке любого файла будет выдана ошибка с кодом LIMIT_UNEXPECTED_FILE.

    Есть ли способ получить взамен URL загруженного объекта? person 0x77dev; 11.08.2020

    @Deepak Кстати, это ответ на ваш вопрос, вы попадете внутрь файлового объекта file.location. person 0x77dev; 11.08.2020

    @ Turivishal — Вот как я реализовывал. См. Мой вопрос по тому же stackoverflow.com/questions/63358933/ person 0x77dev; 11.08.2020

  3. 0x77dev

    Просто используйте

    req.file.location

    в ответе об успехе

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: