@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);
          }
      })


В нужном ли я направлении?
  • Вопрос задан
  • 28 просмотров
Решения вопроса 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;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Spice IT Recruitment Москва
До 200 000 руб.
TeamJet Москва
До 100 000 руб.
Fundraise Up Санкт-Петербург
от 140 000 до 200 000 руб.