получить файл, который отправил мультер в nodejs? - PullRequest
0 голосов
/ 09 июля 2020

это моя загрузка. js код:

var multer = require('multer');
var express = require('express');
const router = express.Router();

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads');
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now());
  },
});

var upload = multer({ storage: storage });

router.post('/', upload.single('file'), (req, res, next) => {
  const file = req.file;
  if (!file) {
    const error = new Error('Please upload a file');
    error.httpStatusCode = 400;
    return next(error);
  }
  res.send(file);
});

module.exports = router;

может кто-нибудь сказать, что будет router.get ? чтобы я мог получить изображение в ответе.

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

eol ответ хорош, но если вам нужно поддерживать доступ, контроллер может выглядеть примерно так:

res.writeHead(200,{'content-type':'image/jpg'});
fs.createReadStream('./image/demo.jpg').pipe(res);
0 голосов
/ 09 июля 2020

Вы можете просто статически обслуживать папку uploads. При этом вам не нужен фактический обработчик get, вместо этого вы определяете express.static -среднее ПО

app.use(express.static('uploads'));

. Теперь клиент может просто выполнить запрос к http://yourServer/<imagename>-<timestamp>, и файл будет обслуживаться автоматически.

EDIT:

Чтобы получить сгенерированное имя файла для клиента, вы можете сделать следующее:

Вместо того, чтобы делать res.send(file); в вашем post-handler, вы можете вернуть json, содержащий сгенерированное имя файла, которое затем может запросить клиент:

app.post("/upload", upload.single('image'), (req, res) => {
    res.json({uploadedFile: req.file.filename})
});

Еще одна вещь: вы потеряете расширение файла с помощью своей filename -функции . Чтобы сохранить расширение, вы можете сделать (убедитесь, что require модуль path):

filename: (req, file, cb) => {
    const extension = path.extname(file.originalname);
    cb(null, `${file.fieldname}-${Date.now()}${extension}`);
}
...