2013-04-02 3 views
42

Ich muss ein Bild hochladen und anzeigen, sowie speichern, damit ich nicht verlieren, wenn ich den localhost aktualisieren. Dies muss über die Schaltfläche "Hochladen" erfolgen, die zur Auswahl einer Datei auffordert.Wie hochzuladen, anzuzeigen und speichern Sie Bilder mit node.js und express

Ich benutze node.js und Express für die serverseitige Code, und bin wirklich neu in der Web-Anwendung Programmierung, Jegliche Hilfe wäre willkommen.

Danke ist Fortschritt.

+1

Werfen Sie einen Blick auf die [ 'FAQ'] (http://stackoverflow.com/faq) sein, welche Art von Fragen wissen sollten fragte hier. Wie auch immer, ich beantworte deine Frage dieses Mal. – fardjad

Antwort

97

Zunächst einmal sollten Sie ein HTML Formular mit einem file input element darin machen. Hier ist ein einfaches Beispiel:

<form method="post" enctype="multipart/form-data" action="/upload"> 
    <input type="file" name="file"> 
    <input type="submit" value="Submit"> 
</form> 

dann sollten Sie express.bodyParser() Middleware laden:

app.use(express.bodyParser({uploadDir:'/path/to/temporary/directory/to/store/uploaded/files'})); 

und eine Route zu definieren, um das Formular Post handhaben:

var path = require('path'), 
    fs = require('fs'); 
// ... 
app.post('/upload', function (req, res) { 
    var tempPath = req.files.file.path, 
     targetPath = path.resolve('./uploads/image.png'); 
    if (path.extname(req.files.file.name).toLowerCase() === '.png') { 
     fs.rename(tempPath, targetPath, function(err) { 
      if (err) throw err; 
      console.log("Upload completed!"); 
     }); 
    } else { 
     fs.unlink(tempPath, function() { 
      if (err) throw err; 
      console.error("Only .png files are allowed!"); 
     }); 
    } 
    // ... 
}); 

die hochgeladene Datei zu zeigen, ich Angenommen, Sie haben bereits eine HTML Seite mit einem Bild-Tag:

<img src="/image.png" /> 

Jetzt können Sie res.sendFile verwenden das hochgeladene Bild zu dienen:

app.get('/image.png', function (req, res) { 
    res.sendfile(path.resolve('./uploads/image.png')); 
}); 
+34

Sie sind ein Gentleman und ein Gelehrter – mattdlockyer

+5

Für jeden, der auf 'req.files' oder 'req.body' zugreifen möchte, behandelt body-parser jetzt nur JSON, siehe https://github.com/expressjs/multer –

+4

as "app.use (express.bodyParser ({uploadDir: '...'}));" funktioniert nicht mehr, sollte man "app.use (bodyParser ({uploadDir: '...'}))) verwenden;". Dafür muss body-parser über npm hinzugefügt und über "var bodyParser = require ('body-parser')" zu der Datei hinzugefügt werden, in der Sie ihn verwenden. " – thenobol

Verwandte Themen