2011-08-16 9 views
2

node.jsにサーバー側のアップロードコンポーネントを作成しようとしていますが、PLUploadから送信された情報の解釈に問題があります。 PLUpload(HTML5モード)はファイルをバイナリ情報として送信するので、これまで使用しようとしていたnode.jsパッケージ(node-formidableとnode-express)に問題が発生します。マルチパートコンテンツタイプのHTMLアップロードnode.jsを使用したPLUploadアップロードの処理

何が価値があるのは、これは私が使用しようとしてきたコードであるために...

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

私は以下のコードでのNode.jsで(HTML5モードで)pluploadを使用しても問題がありません。

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

私はチャンクが異なる要求に来る言ったようにelifeの答えは、チャンクのアップロードのために動作しませんでしたように私は、これを処理するためにnode-pluploaderを作成しました。

Expressベースの使用例:

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); 
}); 
関連する問題