2017-05-27 90 views
1

我正在創建一個簡單的應用程序作爲一個學習經驗與離子2,連接到節點服務器運行multer上傳圖像。我遇到的問題是,我需要將最後一個文件名從multer返回到上傳它的應用程序,以便將其保存到本地。我正在使用@ ionic/cloud-angular的Auth和User模塊來驗證和用戶信息。用戶對象具有諸如「名稱」,「電子郵件」,「用戶名」,「圖像」等內容的詳細信息對象...因此,當圖像上傳到節點服務器並且保存它時,我需要獲取該文件返回到應用程序,以便我可以更新user.details.image屬性。返回上傳文件與Muller和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});重發(); 我真的不知道在這一點上,我可以找到的所有教程,只是顯示如何創建一個新的文件名,並保存在磁盤或數據庫或內存中的文件,但沒有顯示如何才能真正得到文件名返回到上傳它的應用程序。 非常感謝您的幫助,我真的很感激。如果您需要查看上傳這些內容的離子2代碼,請告訴我,我也會使用該代碼更新該帖子。謝謝。

+0

上傳多個文件req.files

一旦你得到了文件名,你可以將其發送給客戶端,你可以得到的文件名請問這是怎麼你編碼IRL?行之間沒有換行符? Ouch ... – borislemke

+0

不,我試圖壓縮代碼並簡化發佈。我敢肯定,如果我發佈了200行代碼,那麼人們會感到有點惱火,可以在50年完成。我認爲,這將是更好的文章 –

回答

3

如果您要上傳單個文件使用req.file.filename

,如果你使用res.send({filename:FileName});

+0

那部分是不是問題,我已經能夠上傳該文件沒有問題,但我無法弄清楚如何將新文件名返回到上傳應用程序。因爲我正在用multer創建一個新文件名,所以我需要告訴上傳文件的應用程序,新文件名是什麼。 –

+0

作爲一個例子,可以說我用ajax ... $阿賈克斯({ 網址: 「本地主機:3000 /上傳」, 數據:{post_image:[文件名]}, 成功:函數(MSG){ //需要新文件名 } }); –

+0

res.send({filename:name_of_your_file});你想要這個嗎? –