2016-12-05 5 views
0

Ich verwende "react-dropzone", um den Benutzern die Möglichkeit zu geben, ihre Bilder hochzuladen. Wenn ein Benutzer eingibt, speichere ich die Bilder in der Amazon S3 Cloud. Ich muss die Bildbreite messen, aber ich habe bereits das imagemagick-Paket und einige andere npm-Module ausprobiert und ich habe immer ein Problem wie "Kann Modul nicht finden" fs "" oder "Kann Modul nicht finden ../lib/detector'(...) ". Irgendwelche Vorschläge?MeteorJS Get image width

S3.upload({ 
      files:this.files, 
      path:"tours/"+this.tourId 
     },function(e,result){ 
     // Get Image width here 
    }); 

Antwort

1

Jede file sollte eine .preview Eigenschaft haben (es sei denn, Sie setzen disablePreview prop). Die file.preview ist ein Blob-URL, die Sie in ein Image() laden können die Breite und Höhe in seinem onload Ereignisse zu erfassen:

var image = new Image(); 
image.src = window.URL.createObjectURL(file.preview); 
image.onload = function() { 
    var width = image.width; 
    var height = image.height; 
    // TODO: Do something with the dimensions 
}; 
1

Das fs-Modul ist nur auf dem Server verfügbar, ebenso wie imagemagick. Sie müssten also die Bilder an Ihren Meteorserver übermitteln, um sie zu verwenden.

Alternativ AWS S3 hat Lambda-Funktionen (die in Javascript sein können) und kann ausgelöst werden, wenn Sie eine Datei hochladen, so dass Sie die Erkennung dort tun könnten. Sie können die Bildinformationen in einer separaten Textdatei in AWS speichern und dann mithilfe einer HTTP-GET-Anforderung abrufen. Das einzige Problem dabei ist, dass die Lambda-Funktion asynchron ausgeführt wird, so dass Sie einige Zeit warten müssen, bevor Sie die Datei anfordern.

Das AWS-API-Gateway ermöglicht das Aufrufen von Lambda-Funktionen mit einer HTTP-Anforderung. Sobald die Datei hochgeladen wurde, besteht Ihre nächste Aktion darin, die Lambda-Funktion HTTP GET auszuführen. Dadurch erhalten Sie die Informationen, die Sie benötigen.