2017-05-27 19 views
1

イメージをアップロードするためにmulterを実行しているノードサーバーに接続するionic 2の学習体験として、簡単なアプリケーションを作成しています。私が実行している問題は、multerから最終的なファイル名をアップロードしてローカルに保存する必要があるということです。私は認証とユーザー情報のために@ ionic/cloud-angularのAuthとUserモジュールを使用しています。 Userオブジェクトには、「名前」、「電子メール」、「ユーザー名」、「イメージ」などの詳細オブジェクトがあります。 イメージはノードサーバーにアップロードされ、それを保存するときに取得する必要がありますそのファイル名をアプリケーションに戻して、user.details.imageプロパティを更新することができます。ここでmulterとnodejsを使ってアップロードしたファイルのファイル名を返します

var express = require('express'); 
var http = require('http'); 
var bodyParser = require('body-parser'); 
var multer = require('multer'); 
var cors = require('cors'); 
var postStorage = multer.diskStorage({ 
    destination: function(req, file, callback) { 
     callback(null, './uploads'); 
    }, 
    filename: function(req, file, callback) { 
     let fileName = '', postName; 
     if(typeof req.body.postName !== "undefined") { 
      postName = req.body.postName.toLowerCase().replace(/ /g, '-'); 
      filename += postName; 
     } 
     fileName += new Date().getTime(); 
     fileName += ".png"; 
     callback(null, fileName); 
    } 
}); 
var app = express(); 
app.set('port', process.env.PORT || 3000); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: false})); 
app.use(cors()); 
app.post('/upload', function(req, res) { 
    var uploadPost = multer({storage: postStorage}).single('post_image'); 
    uploadPost(req, res, function(err) { 
     if(err) { 
      return res.end("error uploading file"); 
     } 
     res.end("file uploaded"); 
    }); 
}); 
app.listen(app.get('port'); 
console.log("app listening on port: " _ app.get('port')); 

は、それが保存されてmulter最終的なファイル名を送り返す持ってする方法はあります...私のノードサーバの簡易版ですか? res.json({fileName:fileName})のようなものです。 res.end(); 私は本当にこの時点では分かりません。私はmulter上で見つけることができるすべてのチュートリアルでは、新しいファイル名を作成し、ディスクまたはデータベースまたはメモリにファイルを保存する方法を示していますが、ファイル名をアップロードしたアプリケーションに戻します。 事前にお手伝いいただきありがとうございます。本当にありがとうございます。あなたが物事をアップロードするイオン2のコードを見る必要があるなら私に知らせてください、そして私はそのコードでポストを更新します。ありがとうございました。

+0

を使用してクライアントに送信することができ、複数のファイルにreq.files

をアップロードする場合は、req.file.filename

を使用してファイル名を取得することができます1つのファイルをアップロードする場合、この方法ですあなたはIRLをコードしていますか?行間に改行はありませんか?うわー... – borislemke

+0

いいえ、私はコードを凝縮し、投稿用に簡素化しようとしていました。 200行のコードを投稿すると、人々は少し迷惑をかけるだろうと確信しています。それは50で行うことができます。投稿の方が良いと思いました –

答えて

3

あなたはあなたがファイル名を持ったら、あなたはres.send({filename:FileName});

+0

その部分は問題ではなく、アップロードできましたファイルは問題ありませんが、アップロードするアプリケーションに新しいファイル名を返す方法はわかりません。私はmulterで新しいファイル名を作成しているので、ファイルをアップロードしたアプリケーションに新しいファイル名を伝える必要があります。例として –

+0

は、私が使用して言うことができますAJAX ... $アヤックス({ URL: "localhostの:3000 /アップロード"、 データ:{post_image:[FILENAME]}、 成功:関数(MSG){ //ここに新しいファイル名が必要です } }); –

+0

res.send({filename:name_of_your_file});これはあなたが欲しいですか? –

関連する問題