2017-05-27 4 views
1

Ich erstelle eine einfache Anwendung als Lernerfahrung mit ionischen 2, die eine Verbindung zu einem Knoten Server mit multer zum Hochladen von Bildern verbindet. Das Problem, auf das ich stoße, ist, dass ich den endgültigen Dateinamen von Multer zurück zu der App bringen muss, die ihn hochgeladen hat, um es lokal zu speichern. Ich benutze die Module Auth und User von @ ionic/cloud-angular für Authentifizierung und Benutzerinformationen. Das Benutzerobjekt hat ein Detailobjekt mit Dingen wie "Name", "E-Mail", "Benutzername", "Bild", ... Also, wenn ein Bild auf den Knotenserver hochgeladen wird und multer es speichert, muss ich bekommen diesen Dateinamen zurück in die Anwendung, damit ich die Eigenschaft user.details.image aktualisieren kann.return Dateiname der hochgeladenen Datei mit Multer und Nodejs

Hier ist eine einfache Version meiner Knotenserver ...

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')); 

Gibt es eine Möglichkeit, es zu haben, die endgültigen Dateinamen zurückschicken, die gespeichert multer? Etwas wie res.json ({fileName: fileName}); erneut senden(); Ich weiß wirklich nicht an dieser Stelle, und alle Tutorials, die ich auf multer finden kann, zeigen nur, wie man einen neuen Dateinamen erstellt und eine Datei auf der Festplatte oder Datenbank oder Speicher speichert, aber nirgends zeigt, wie Sie das bekommen können Dateiname zurück zu der Anwendung, die ihn hochgeladen hat. Vielen Dank im Voraus für jede Hilfe, ich schätze es wirklich. Wenn Sie den ionischen 2 Code sehen müssen, der das Zeug hochlädt, lassen Sie es mich bitte wissen und ich werde den Beitrag auch mit diesem Code aktualisieren. Vielen Dank.

+0

Ist dies, wie du Code IRL? Keine Zeilenumbrüche zwischen Zeilen? Autsch ... – borislemke

+0

Nein, ich habe versucht, den Code zu verdichten und für das Posten zu vereinfachen. Ich bin mir sicher, dass die Leute ein bisschen genervt sein würden, wenn ich 200 Codezeilen poste, was in 50 möglich wäre. Ich dachte, das wäre besser für den Post –

Antwort

3

Wenn Sie einzelne Datei hochladen Sie Dateinamen mit req.file.filename

, wenn Sie mehrere Dateien hochladen req.files

Sobald Sie den Dateinamen bekam bekommen können, können Sie es an Client senden res.send({filename:FileName}); mit

+0

, der Teil ist nicht das Problem, das ich hochladen konnte die Datei kein Problem, aber ich kann nicht herausfinden, wie Sie den neuen Dateinamen an die Anwendung zum Hochladen zurückgeben. Da ich mit multer einen neuen Dateinamen erstelle, muss ich der Anwendung, die die Datei hochgeladen hat, sagen, was der neue Dateiname ist. –

+0

Als Beispiel können, sage ich verwenden Ajax ... $ Schnipsel ({ url: "localhost: 3000/upload", Daten: {post_image: [Dateiname]}, Erfolg: function (msg) { // brauche den neuen Dateinamen hier } }); –

+0

res.send ({Dateiname: Name_der_Datei}); Willst du das? –

Verwandte Themen