2016-10-26 2 views
0

ich die folgende Bibliothek verwenden möchten, Bilder zu komprimieren https://github.com/imagemin/imageminWie imagemin verwenden, um Bilder und busboy zu komprimieren

Das Problem ist, wenn die Börse ein Formular verwenden, wie steck ich in den Dateidetails aus dem Formular zum Bild min Plugin? Wie zum Beispiel, wenn das Dateiformular-Feld Beispiel-Bild aufgerufen wird, wie schließe ich dieses Datei-Formular-Feld an Bild min Plugin, so dass es die Bilder komprimieren kann?

Ich habe versucht:

req vom Express ist/NodeJS req

var filebus = new Busboy({ headers: req.headers }), 
    promises = []; 

    filebus.on('file', function(fieldname, file, filename, encoding, contentType) { 

     var fileBuffer = new Buffer(0), 
      s3ImgPath; 

     if (file) { 
      file.on('data', function (d) { 
       fileBuffer = Buffer.concat([fileBuffer, d]); 
      }).on('end', function() { 
       Imagemin.buffer(fileBuffer, { 
        plugins: [ 
         imageminMozjpeg(), 
         imageminPngquant({quality: '80'}) 
        ] 
       }).then(function (data) { 
        console.log(data[0]); 
        if (s3ImgPath) { 
         promises.push(this.pushImageToS3(s3ImgPath, data[0].data, contentType)); 
        } 
       }); 
      }.bind(this)); 
     } 
    }); 

Aber das Problem ist, ich eher einen Puffer der Datei, die ich auf S3 hochladen. Ich möchte die Dateien nicht in einen Build/Images-Ordner bringen. Ich möchte einen Puffer für die Datei bekommen, sie komprimieren und diesen Puffer auf s3 hochladen. Wie kann ich image min verwenden, um einen Puffer des Datei-Uploads per HTML-Formular zu erhalten und dieses auf s3 hochzuladen?

+0

zeigen Bitte jeden Code, den Sie bisher haben. Vorzugsweise ein funktionierender Server und eine Webseite mit einem Formular. – tcooc

+0

Ich habe weitere Informationen hinzugefügt –

+0

Verwenden Sie es - https://www.npmjs.com/package/compress-images –

Antwort

0

Die Dokumentation für den Ausgabeparameter zeigt, dass es optional ist (obwohl die Funktionsdeklaration nicht, was möglicherweise verwirrend sein kann).

Ausgang

Typ: string

Stellen Sie den Zielordner, wo Ihre Dateien geschrieben werden. Wenn kein Ziel angegeben ist, werden keine Dateien geschrieben.

Daher können Sie aus Schreiben der Dateien in den Speicher wählen und verwenden Sie nur die Ausgabe im Speicher:

imagemin([file.path], { 
    plugins: [ 
     imageminMozjpeg(), 
     imageminPngquant({quality: '65-80'}) 
    ] 
}).then(files => { 
    // upload file to S3 
}); 
+0

Wie verwenden wir das mit Busboy? wissen Sie? Siehe den obigen Code –

Verwandte Themen