2

モバイルtriggerioアプリからnodejsサービスにファイルを投稿しようとしています。リクエストはpostメソッドにヒットしますが、リクエストobjのフォームオブジェクトがnullであるため、失敗します。(TypeError:未定義のメソッド'complete'を呼び出すことはできません)

この投稿で受け入れられた回答のコードを採用しました:Node.js、Express、Mongooseを使用した画像のアップロード

これは私の現在のnodejsコードです:

var express = require('express')
  , form = require('connect-form');

var app = express.createServer(
  form({ keepExtensions: true })
);

app.post('/fileupload', function(req, res, next){

  //req. form is nulL
  req.form.complete(function(err, fields, files){
    if (err) {
      next(err);
    } else {
      console.log('\nuploaded %s to %s'
        ,  files.image.filename
        , files.image.path);
      res.redirect('back');
    }
  });

  req.form.on('progress', function(bytesReceived, bytesExpected){
    var percent = (bytesReceived / bytesExpected * 100) | 0;
    process.stdout.write('Uploading: %' + percent + '\r');
  });
});

app.listen(process.env.PORT);
console.log("express started");

そして、これはtriggerioでの私のアップロード方法です:

function uploadFile (file){
    forge.request.ajax({
        url: 'http://resttrigger.aykarsi.c9.io/fileupload',
        type: 'POST',
        files: [file],
        fileUploadMethod: 'raw',
        dataType: 'json',
        success: function (data) {
            forge.logging.log("success " + data);
        },
        error: function (e) {
            forge.logging.log("error " + e);
        }
    });
}
4

1 に答える 1

2

ここでの使用fileUploadMethod: 'raw'が問題になる可能性があります。これは、リクエストの本文が、ノードコードが期待するマルチパートエンコード形式ではなく、単なるバイナリブロブであることを意味します。

参考までに、アップロードされたファイルを/tmp次の場所に保存する最小限のハンドラーを次に示します。

exports.upload = function(req, res){
    var filename = '/tmp/' + new Date().getTime();

    console.log(JSON.stringify(req.files));

    // replace "test" with your actual form field name
    fs.readFile(req.files["test"].path, function (err, data) {
        fs.writeFile(filename, data, function (err) {
            res.send({filename: filename});
        });
    });
};
于 2012-05-25T16:18:23.383 に答える