Обработка загрузок PLUpload с помощью node.js - PullRequest
2 голосов
/ 16 августа 2011

Я пытаюсь создать серверный компонент загрузки в node.js, но у меня возникают проблемы с интерпретацией информации, отправленной из PLUpload.Из того, что я могу сказать, PLUpload (в режиме HTML5) отправляет файлы в виде двоичной информации, что создает проблемы для пакетов node.js, которые я пытался использовать до сих пор (node-formidable и node-express), поскольку они ожидают нормальногоHTML-загрузки с составными типами контента.

Для этого стоит код, который я пытался использовать ...

var formidable = require('formidable');
var sys = require('sys');

http.createServer( function( req, res ){

    console.log('request detected');

    if( req.url == '/upload/' ){

        console.log('request processing');

        var form = new formidable.IncomingForm();
        form.parse( req, function( err, fields, files ){
            res.writeHead( 200, {
                'Access-Control-Allow-Origin': 'http://tksync.com',
                'Access-Control-Allow-Methods': 'GET,PUT,POST,DELETE',
                'Access-Control-Allow-Headers': '*',
                'content-type': 'text/plain'
            });
            res.write('received upload:\n');
            res.end(sys.inspect({
                fields: fields,
                files: files
            }));
        });
    }

}).listen( 8080 );

Ответы [ 2 ]

2 голосов
/ 27 апреля 2012

У меня нет проблем с использованием plupload (в режиме HTML5) с node.js с кодом ниже:

module.exports.savePhoto= (req, res) ->
  if req.url is "/upload" and req.method.toLowerCase() is "post"
    console.log 'savePhoto: req.url=', req.url, 'req.method=', req.method
    form = new formidable.IncomingForm()
    files = []
    fields = []
    form.uploadDir = config.PATH_upload
    form.on("field", (field, value) ->
      console.log field, value
      fields.push [ field, value ]
    ).on("file", (field, file) ->
      console.log field, file
      files.push [ field, file ]
    ).on "end", ->
      console.log "-> upload done: fields=", fields
      console.log "received fields:", util.inspect(fields)
      console.log "received files:",  util.inspect(files)
      size = files[0][1].size
      pathList = files[0][1].path.split("/")
      #console.log 'pathList=', pathList
      file = pathList[pathList.length - 1]
      console.log "file=" + file
      ......
1 голос
/ 17 августа 2014

Я создал node-pluploader, чтобы справиться с этим, так как я обнаружил, что ответ elife не работает для фрагментированных загрузок, так как указанные фрагменты приходят по разным запросам.

Экспресс-пример использования:

var Pluploader = require('node-pluploader');

var pluploader = new Pluploader({
  uploadLimit: 16
});

 /*
  * Emitted when an entire file has been uploaded.
  *
  * @param file {Object} An object containing the uploaded file's name, type, buffered data & size
  * @param req {Request} The request that carried in the final chunk
  */
pluploader.on('fileUploaded', function(file, req) {
  console.log(file);
});

/*
  * Emitted when an error occurs
  *
  * @param error {Error} The error
  */
pluploader.on('error', function(error) {
    throw error;
});

// This example assumes you're using Express
app.post('/upload', function(req, res){
  pluploader.handleRequest(req, res);
});
...