2014-01-17 4 views
6

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

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

ответ

6

Это предупреждение специально против добавления промежуточного программного обеспечения 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 переходит к отказу от многократного из-за этой точной проблемы, но, похоже, нет никаких планов по добавлению замены файлов на основе потока. Вместо этого они рекомендуют использовать node-multiparty, который использует потоки, чтобы избежать размещения файла на диске. Однако, похоже, нет никаких хороших ссылок, которые можно найти для использования многопартийности в качестве промежуточного программного обеспечения без сохранения файлов, поэтому вам придется обратиться к автору многопартийности или поближе рассмотреть API для его реализации с помощью Express ,

+0

В ответ на [Node.js - MEAN Стек Файлы] (http://stackoverflow.com/a/23066169/609021), описано, как использовать многоуровневое соединение в качестве промежуточного программного обеспечения без записи на диск ... –

Смежные вопросы