файл экспресс-загрузки узла со средним стеком

Я должен реализовать форму загрузки, которую я думал об использовании bodyparser, но я прочитал http://andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html

так как же загрузить файл с помощью экспресса, используя средний стек? может грозный или другие модули?


person Whisher    schedule 17.01.2014    source источник


Ответы (2)


Это предупреждение специально против добавления промежуточного программного обеспечения express.bodyparser во весь ваш стек, поскольку оно добавляет express.multipart ко всем конечным точкам POST, и поэтому загрузка файлов автоматически принимается на всех конечных точках POST. По умолчанию фреймворк автоматически сохраняет любые загруженные файлы в /tmp, поэтому, если вы не очистите их, злоумышленник может заполнить ваш диск загруженными файлами.

Если вы хотите избежать использования дополнительных модулей, вам следует реализовать express.multipart на конечных точках, где вы хотите разрешить загрузку файлов. Вот о чем я говорю:

var express = require("express")
  , app = express();

// middleware (no bodyparser here)
app.use(express.json());
app.use(express.urlencoded());

// average GET endpoint
app.get("/", function(req,res) {
  res.send('ok');
});

// average POST endpont
app.post("/login", function(req,res) {
  res.send('ok');
});

// File upload POST endpoint
app.post('/upload', express.multipart, function(req, res) {
  //File upload logic here
  //Make sure to delete or move the file accordingly here, otherwise files will pile up in `/tmp`
});

Обратите внимание на включение express.multipart в конечную точку загрузки файла. Эта конечная точка теперь будет обрабатывать многокомпонентные загрузки файлов, и если вы правильно их обработаете, они не будут представлять угрозы.

Теперь, сказав вам все это, Connect отказывается от использования multipart из-за именно этой проблемы, но, похоже, нет никаких планов по добавлению замены загрузки файлов на основе потока. Вместо этого они рекомендуют использовать node-multiparty, который использует потоки, чтобы никогда не размещать файл на диске. Тем не менее, похоже, я не могу найти никаких хороших ссылок на использование многопартийности в качестве промежуточного программного обеспечения без сохранения файлов, поэтому вам придется связаться с автором многопартийности или более внимательно изучить API для его реализации с помощью Express. .

person Rob Riddle    schedule 10.02.2014
comment
В ответе на node.js — MEAN Stack File Uploads описано, как использовать node-multiparty в качестве промежуточного ПО без записи на диск. .. - person Patrick Fowler; 26.12.2014

Я создал пример, который использует Express & Multer - очень просто, избегает всех предупреждений Connect

https://github.com/jonjenkins/express-upload

person Jon J    schedule 30.03.2014