Задать вопрос
@AndrewRusinas

Как обрабатывать файлы не сервере правильно?

Загружаю файлы на сервер с помощью multer. Проблема в том, что он требует точного указания папки, куда будет сохраняться файл. Как быть в случае, если путь до файла должен быть динамическим, например, по дням недели?
Storage задается один раз.
Судя по всему, через параметр req в destination можно прокинуть какой-нибудь параметр, типа "folder", на его основе создать новую папку или использовать существующую.
const storage = multer.diskStorage({
          destination: function (req, file, cb) {
              cb(null, './src/static/uploads/blog');
          },
          filename: function (req, file, cb) {
              cb(null, file.originalname);
          }
      })


В нужном ли я направлении?
  • Вопрос задан
  • 64 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Как быть в случае, если путь до файла должен быть динамическим, например, по дням недели?

Получая файл, в обработчике multer-а перемещаете файл в нужную вам папку (и переименовываете при необходимости). Это можно сделать как выполнив из ноды команду ОС (*nix, win), так и средствами самой ноды

Выглядеть это будет примерно так:
// роутер Express-а ./routes/files
var fs = require('fs');
var express = require('express');
var router = express.Router();


// получаем файлы
var multer = require('multer');
var upload = multer({ 
	dest:'./folder_for_upload_files/'
	// прочие опции
}).single("upload");

router.post('/files/upload', function(req, res, next) {
	upload(req, res, function (err) {
		if (err){
		   // обработка ошибки
		   // и завершение обработки запроса res.end() или res.send(...)
		   return;
		}
		
		// если же загрузка произошла успешно, то
		// 1. определяем в какую папку и под каким именем переместить файл
		// 2. перемещаем файл в нужную папку
		// 3. делаем об этом запись в БД или в файлики или кудато еще (в место предназначенное для хранения этой информации)
		// 4. завершаем обработки запроса ( res.end() или res.send(...) )
		
		// в помощь:
		// req.file.originalname - оригинальное имя  файла на компе клиента
		// req.file.filename - имя загруженного в "./folder_for_upload_files/" файла
		
		
	});
});


module.exports = router;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы