Heim > Web-Frontend > js-Tutorial > NodeJS Advanced: Datei-Upload basierend auf Express Multer

NodeJS Advanced: Datei-Upload basierend auf Express Multer

高洛峰
Freigeben: 2016-11-08 14:22:10
Original
1530 Leute haben es durchsucht

Umgebungsinitialisierung

ist sehr einfach, nur eine Befehlszeile.

npm install express multer multer --save

Unter jedem Beispiel gibt es die folgenden zwei Dateien

➜ upload-custom-filename git:(master ) ✗ tree -L 1.
├── app.js # Servercode, der zum Verarbeiten von Datei-Upload-Anfragen verwendet wird ├── form.html # Front-End-Seite, die zum Hochladen von Dateien verwendet wird

Einfaches Beispiel: Einzelbild-Upload

Den vollständigen Beispielcode finden Sie hier.

app.js.

var fs = require('fs');
var express = require('express');
var multer  = require('multer')

var app = express();
var upload = multer({ dest: 'upload/' });

// 单图上传
app.post('/upload', upload.single('logo'), function(req, res, next){
    res.send({ret_code: '0'});
});

app.get('/form', function(req, res, next){
    var form = fs.readFileSync('./form.html', {encoding: 'utf8'});
    res.send(form);
});

app.listen(3000);
Nach dem Login kopieren

form.html.

<form action="/upload-single" method="post" enctype="multipart/form-data">
    <h2>单图上传</h2>
    <input type="file" name="logo">
    <input type="submit" value="提交">
</form>
Nach dem Login kopieren

Führen Sie den Dienst aus.

node app.js
Nach dem Login kopieren

Besuchen Sie http://127.0.0.1:3000/form, wählen Sie das Bild aus, klicken Sie auf „Senden“, fertig. Anschließend sehen Sie im Upload-Verzeichnis ein zusätzliches Bild.

Grundlegendes Beispiel: Hochladen mehrerer Bilder

Den vollständigen Beispielcode finden Sie hier.

Der Code könnte nicht einfacher sein, ändern Sie einfach den vorherigen upload.single('logo') in upload.array('logo', 2). Zeigt an: Unterstützt das gleichzeitige Hochladen von zwei Bildern und das Namensattribut ist ein Logo.

app.js.

var fs = require(&#39;fs&#39;);
var express = require(&#39;express&#39;);
var multer  = require(&#39;multer&#39;)

var app = express();
var upload = multer({ dest: &#39;upload/&#39; });

// 多图上传
app.post(&#39;/upload&#39;, upload.array(&#39;logo&#39;, 2), function(req, res, next){
    res.send({ret_code: &#39;0&#39;});
});

app.get(&#39;/form&#39;, function(req, res, next){
    var form = fs.readFileSync(&#39;./form.html&#39;, {encoding: &#39;utf8&#39;});
    res.send(form);
});

app.listen(3000);
Nach dem Login kopieren

form.html.

<form action="/upload-multi" method="post" enctype="multipart/form-data">
    <h2>多图上传</h2>
    <input type="file" name="logos">
    <input type="file" name="logos">
    <input type="submit" value="提交">
</form>
Nach dem Login kopieren

Die gleichen Testschritte werden nicht wiederholt.

Informationen zum hochgeladenen Bild erhalten

Den vollständigen Beispielcode finden Sie hier.

Oft müssen wir nicht nur Bilder auf dem Server speichern, sondern auch noch viele andere Dinge erledigen, beispielsweise Bildinformationen in der Datenbank speichern.

Häufig verwendete Informationen wie ursprünglicher Dateiname, Dateityp, Dateigröße, lokaler Speicherpfad usw. Mit Hilfe von Multer können wir diese Informationen ganz einfach erhalten.

Dies ist immer noch ein Beispiel für das Hochladen einer einzelnen Datei. Zu diesem Zeitpunkt schreibt Multer die Dateiinformationen in req.file, wie im folgenden Code gezeigt.

app.js.

var fs = require(&#39;fs&#39;);
var express = require(&#39;express&#39;);
var multer  = require(&#39;multer&#39;)

var app = express();
var upload = multer({ dest: &#39;upload/&#39; });

// 单图上传
app.post(&#39;/upload&#39;, upload.single(&#39;logo&#39;), function(req, res, next){
    var file = req.file;

    console.log(&#39;文件类型:%s&#39;, file.mimetype);
    console.log(&#39;原始文件名:%s&#39;, file.originalname);
    console.log(&#39;文件大小:%s&#39;, file.size);
    console.log(&#39;文件保存路径:%s&#39;, file.path);

    res.send({ret_code: &#39;0&#39;});
});

app.get(&#39;/form&#39;, function(req, res, next){
    var form = fs.readFileSync(&#39;./form.html&#39;, {encoding: &#39;utf8&#39;});
    res.send(form);
});

app.listen(3000);
Nach dem Login kopieren

form.html.

<form action="/upload" method="post" enctype="multipart/form-data">
    <h2>单图上传</h2>
    <input type="file" name="logo">
    <input type="submit" value="提交">
</form>
Nach dem Login kopieren
Nach dem Login kopieren

Starten Sie den Dienst und laden Sie die Datei hoch. Die Informationen werden auf der Konsole angezeigt.

Dateityp: image/png
Originaldateiname: 1.png
Dateigröße: 18379 Dateispeicherpfad: upload/b7e4bb22375695d92689e45b551873d9

Benutzerdefinierter Datei-Upload-Pfad, Name

Manchmal möchten wir den Pfad und Namen des Datei-Uploads anpassen, Multer kann auch einfach implementiert werden.

Das Anpassen des lokalen Speicherpfads

ist sehr einfach. Wenn wir beispielsweise Dateien in das Verzeichnis „my-upload“ hochladen möchten, ändern Sie einfach das Konfigurationselement „dest“.

var upload = multer({ dest: &#39;upload/&#39; });
Nach dem Login kopieren

Unter der obigen Konfiguration werden alle Ressourcen im selben Verzeichnis gespeichert. Manchmal müssen wir die Einstellungen für verschiedene Dateien personalisieren. Weitere Informationen finden Sie im nächsten Abschnitt.

Passen Sie den lokal gespeicherten Dateinamen an

Den vollständigen Beispielcode finden Sie hier.

Der Code ist etwas länger, aber genauso einfach. Multer stellt den Speicherparameter zur Verfügung, um den Pfad und Dateinamen der Ressourcenspeicherung zu personalisieren.

Hinweise zur Verwendung lauten wie folgt:

Ziel: Legen Sie den Speicherpfad der Ressource fest. Beachten Sie, dass es ohne dieses Konfigurationselement standardmäßig unter /tmp/uploads gespeichert wird. Zusätzlich muss der Pfad selbst erstellt werden.

Dateiname: Legen Sie den Dateinamen der lokal gespeicherten Ressource fest.

app.js.

var fs = require(&#39;fs&#39;);
var express = require(&#39;express&#39;);
var multer  = require(&#39;multer&#39;)

var app = express();

var createFolder = function(folder){
    try{
        fs.accessSync(folder); 
    }catch(e){
        fs.mkdirSync(folder);
    }  
};

var uploadFolder = &#39;./upload/&#39;;

createFolder(uploadFolder);

// 通过 filename 属性定制
var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, uploadFolder);    // 保存的路径,备注:需要自己创建
    },
    filename: function (req, file, cb) {
        // 将保存文件名设置为 字段名 + 时间戳,比如 logo-1478521468943
        cb(null, file.fieldname + &#39;-&#39; + Date.now());  
    }
});

// 通过 storage 选项来对 上传行为 进行定制化
var upload = multer({ storage: storage })

// 单图上传
app.post(&#39;/upload&#39;, upload.single(&#39;logo&#39;), function(req, res, next){
    var file = req.file;
    res.send({ret_code: &#39;0&#39;});
});

app.get(&#39;/form&#39;, function(req, res, next){
    var form = fs.readFileSync(&#39;./form.html&#39;, {encoding: &#39;utf8&#39;});
    res.send(form);
});

app.listen(3000);
Nach dem Login kopieren

form.html.

<form action="/upload" method="post" enctype="multipart/form-data">
    <h2>单图上传</h2>
    <input type="file" name="logo">
    <input type="submit" value="提交">
</form>
Nach dem Login kopieren
Nach dem Login kopieren

Ich werde nicht näher auf die Testschritte eingehen, besuchen Sie es einfach und Sie werden die Wirkung erfahren.

Geschrieben auf der Rückseite

Dieser Artikel führt in die grundlegende Verwendung von Multer ein, ohne zu viele Prinzipien abzudecken. Wie das Sprichwort sagt: Es ist besser, einem Mann das Angeln beizubringen, als ihm das Angeln beizubringen. In den folgenden Kapiteln werden die Details des Datei-Uploads erläutert, damit die Leser ein tieferes Verständnis für das Datei-Upload erhalten.


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage