2016-05-15 23 views
0

Ich versuche, meine hochgeladenen Bilder zu den Leuten zu zeigen, die die App besuchen.Zeige hochgeladene Bilder mit collectionfs mit Dateisystem

Ich habe noch nicht die Pakete insecured oder autopublish aus meinem Projekt entfernt.

Ich habe eine Funktion wie diese:

$scope.upload = (event) => { 
    var file = event; //assuming 1 file only 
    console.log(file); 
    if (!file) return; 
    Images.insert(file, function (err, fileObj) { 
    if (err) { 
     console.log(err); 
    } else { 
     console.log('success', fileObj); 
    } 
    }); 
} 

, die das Bild in meinem lokalen Rechner

Images = new FS.Collection("images", { 
    stores: [new FS.Store.FileSystem("images", {path: "/home/user/uploadedimages"})] 
}); 

in meiner meteor mongo Konsole speichert, wenn ich show.collections ich cfs.images.filerecord erhalten, die Folgendes :

{ 
    "_id" : "yqEzEH2us7SZveDm2", 
    "original" : { 
     "name" : "Screenshot from 2016-05-11 14:38:59.png", 
     "updatedAt" : ISODate("2016-05-11T18:38:59.636Z"), 
     "size" : 607292, 
     "type" : "image/png" 
    }, 
    "uploadedAt" : ISODate("2016-05-15T03:04:40.447Z"), 
    "copies" : { 
     "images" : { 
      "name" : "Screenshot from 2016-05-11 14:38:59.png", 
      "type" : "image/png", 
      "size" : 607292, 
      "key" : "images-yqEzEH2us7SZveDm2-Screenshot from 2016-05-11 14:38:59.png", 
      "updatedAt" : ISODate("2016-05-15T03:04:40Z"), 
      "createdAt" : ISODate("2016-05-15T03:04:40Z") 
     } 
    } 
} 

FRAGE

Wie zeige ich die hochgeladenen Bilder auf dem Client an.

Ich habe gelesen, dass Sie etwas tun, wie

<div ng-repeat="image in images"> 
    <img ng-src="{{image.url}}" width="400px" alt=""> 
</div> 

Aber diese machen das Bild nicht oder irgendetwas zeigt überhaupt. Ich weiß, dass ich das Array ohne Abonnement sehen kann, weil ich das autopublish Paket von Meteor immer noch nicht entfernt habe.

+0

ich bin nicht vertraut mit eckigen. aber würde es keine geschweiften Klammern geben oder etwas, um 'Bild in Bildern' zu einer variablen Schleife zu machen? Ich bin Blaze & React. verzeih mir, wenn es sich anhört. –

+0

der eckige Teil stimmt soweit ich das beurteilen kann. – MrE

+0

Die Frage ist, wo laden Sie hoch? Meteor wird öffentliche Inhalte im öffentlichen Ordner bereitstellen. Wenn Sie also das Bild in diesen Ordner hochladen und Sie auf die richtige URL im img-Tag verweisen, wird das Bild angezeigt, wenn die URL aktualisiert wird. Jetzt werden Sie wahrscheinlich ein anderes typisches Problem im Entwicklungsmodus kennenlernen, nämlich dass der Hot-Code-Neuladen in Meteor ausgelöst wird, wenn sich etwas im öffentlichen Ordner ändert. Daher wird Ihre App wahrscheinlich neu geladen, wenn das Bild hochgeladen wird. Der Trick, den ich verwenden musste, ist das Hochladen in einen anderen Ordner und das Schreiben einer Route zu den Serverdateien aus diesem Ordner. – MrE

Antwort

2

Sie können var fileObj.url(); um die URL des hochgeladenen Bildes in Ihrem Erfolgsrückruf zu erhalten. Zum Beispiel:

var url = fileObj.url({brokenIsFine: true}); 
console.log(url); 
+0

Ihre Lösung funktioniert. Ich habe es lokal getestet und es funktioniert, aber ich frage, würde dies in der Produktion tun, da ich manuell bereitstellen muss ich die App immer wieder neu erstellen, würde die App wieder zu bauen bedeutet, alle hochgeladenen Dateien zu verlieren? Ich kann nicht scheinen, den Ordner zu finden, der in 'url/cfs/files/images/... hochgeladen wird. Ich habe auch eine andere Lösung über nginx gemacht, um in einen Ordner außerhalb der App zu laden und es einfach über zu bedienen Nginx Reverse Proxy funktioniert auch und ich habe den Ordner außerhalb der App, aber ich bin mir nicht sicher, ob dies die beste Lösung ist. –

Verwandte Themen