2017-06-23 18 views
0

現在、Phonegapアプリケーションで作業しています。ユーザーがNodeJSサーバーにファイルをアップロードできるようにしたいと思います。ここでCordova FileTransferからNodeJSへのファイルアップロードエラー

$scope.open = function() 
{ 
     navigator.camera.getPicture(upload, 
     function(message) 
     { 
      alert('get picture failed'); 
     }, 
     { 
      quality: 50, 
      destinationType: navigator.camera.PictureSourceType.FILE_URI, 
      sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY, 
      mediaType: navigator.camera.MediaType.ALLMEDIA 
     }); 

    } 

    var win = function (r) { 
     $scope.log = "Code = " + r.responseCode; 
     $scope.log2 = "Response = " + r.response; 
     $scope.log3 = "Sent = " + r.bytesSent; 
     $scope.$digest(); 

    } 

    var fail = function (error) { 
     $scope.log = "An error has occurred: Code = " + error.code; 
     $scope.log2 = "upload error source " + error.source; 
     $scope.log3 = "upload error target " + error.target; 
     $scope.$digest(); 
    } 

    function upload(fileURI) 
    { 
     $scope.log = fileURI; 
     $scope.$digest(); 

     var options = new FileUploadOptions(); 
     options.fileKey = "file"; 
     options.fileName = fileURI.substr(fileURI.lastIndexOf('/') + 1); 
     options.mimeType = "text/plain"; 
     options.chunkedMode = false; 

     var params = {}; 
     params.value1 = "test"; 
     params.value2 = "param"; 
     options.params = params; 

     var ft = new FileTransfer(); 
     ft.upload(fileURI, "http://192.168.192.111:2999/upload", win, fail, options); 
    }. 

ここ

私はPhoneGapのコントローラのために使用しているコードです...私はウェブの周りのすべてを見てきましたが、私はちょうど仕事に何かを得ることができませんNodeJSサーバの現在のコードは、すべての成功せず、異なる多くのことを試してみました:

var express = require('express'); 
var http = require('http').Server(express); 
var io = require('socket.io')(http); 
var fs = require('fs'); 

var multer = require('multer'); 
var app = new express(); 


app.post('/upload', multer({dest: './uploads/'}).single('upl'), function(req, res) 
{ 
    console.log(req.body); 
    console.log(req.file); 
}) 


http.listen(2999, function(){ 
    console.log('listening on *:2999'); 
}); 

私はなどFileUploadOptionsが定義されていないエラーを取得するために使用するアプリでは、私がであること、固定それらをコードバプロジェクトに追いやった。 さらに、私はイオン1を使用します。

実際のファイルを選択してもリンクが正しいことを確認したにもかかわらず、エラーコード1(エラーソースのアップロード)が絶えず発生しています(Androidデバイスの/ storage/0/emulated/Downloadsなど) 。

また、ときどき私にエラー3を与えます(ターゲットソースをアップロードします)。何らかの種類のサーバーが見つかりませんでした。

明らかに私は間違っていますが、どうすれば修正できるでしょうか?私は最終的にこれをMySQLデータベースにリンクしたいので、手頃な方法がありますか?

ありがとうございます!

答えて

0

私の答えが見つかりました(しばらく前、これはこの記事につまずいている人のためのものです)。

サーバーをhttps://posttestserver.com/post.phpに変更することで、JSが動作するかどうかを最初に試すことができます。そこにアップロードが表示されている場合は、サーバーに問題があります。

私の問題は、私のPC以外に何からのアップロードが失敗するので、私は...、まったくファイアウォールを介して

0
var express=require('express'); 
var bodyParser=require('body-parser'); 
var formidable = require('formidable'); 
var util = require('util'); 
var app=express(); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 
var path=require('path'); 
var mysql =require('mysql'); 
var fs=require('fs'); 

app.use('/public',express.static(path.join(__dirname, 'public'))); 

var connection = mysql.createConnection({ 
     host: 'localhost', 
     user: 'root', 
     password : '', 
     port : 3306, //port mysql 
     database:'xxxxx' 
}); 
app.post('/data', function(req, res) { 

// create an incoming form object 
    var form = new formidable.IncomingForm(), 
     files = [], 
     fields = []; 
    // specify that we want to allow the user to upload multiple files in a single request 
    form.multiples = true; 

    // store all uploads in the /uploads directory 
    form.uploadDir = path.join(__dirname, '/public/images/uploads'); 
    // every time a file has been uploaded successfully, 
    // rename it to it's orignal name 
    form.on('file', function(field, file) { 
    if (path.extname(file.name)=='') { 
     extension='.jpg'; 
    } 
    else{ 
     extension=path.extname(file.name); 
    } 
    var oldpath = file.path; 
    form.uploadDir = path.basename(file.name,extension).concat((Math.random()* 100),extension);    
    var newpath = './public/images/uploads/'+ path.basename(file.name,extension).concat((Math.random()* 100),extension); 

    //fs.rename(file.path, path.join(form.uploadDir, file.name)); 
    fs.rename(oldpath, newpath); 
    }); 
    form.on('field', function(field, value) { 
     fields[field] = value; 
    }); 

    // log any errors that occur 
    form.on('error', function(err) { 
    console.log('An error has occured: \n' + err); 
    }); 

    // once all the files have been uploaded, send a response to the client 

//Call back at the end of the form. 
form.on('end', function() { 

    res.writeHead(200, { 
     'content-type': 'text/plain' 
    }); 
    res.write('received the data:\n\n'); 


    // console.log(fields.name+'-'+fields.nickname); 
    var values={ 
      name:fields.name, 
      nickname:fields.nickname, 
      email:fields.email, 
      password:fields.password, 
      dob:fields.dob, 
      gender:fields.gender, 
      phoneno:fields.phone 
     }; 

    connection.query('INSERT INTO users SET ?', values, function(err,req,res){ 
         if(err){ 
          console.log('Connection result error '+err); 

         } 
          else{ 
         console.log('Success');  

          } 
       }); 

       res.end(); 


}); 
    // parse the incoming request containing the form data 
    form.parse(req); 
}); 

//app.use(app.router); 
app.listen(5000); 
+2

そのコードの後ろに、おそらくいくつかの説明をApacheに聞かせていなかったということでしたか? –

+1

良い読書:https://stackoverflow.com/help/how-to-answer – RPichioli

+0

ajax + jqueryからnodejsへの完全なコードフォームフィールドとmysql DBに保存 –

関連する問題