2016-05-15 2 views
0

Я пытаюсь показать загруженные изображения людям, которые посещают приложение.Показать загруженные изображения с помощью коллекцииfs с помощью файловой системы

Я до сих пор не удалял пакеты insecured или autopublish из моего проекта.

У меня есть функция, как этот:

$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); 
    } 
    }); 
} 

, который сохраняет изображение в моей локальной машине

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

в моей meteor mongo консоли, когда я show.collections я получаю cfs.images.filerecord, который имеет следующие :

{ 
    "_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") 
     } 
    } 
} 

ВОПРОС

Как отобразить загруженные изображения клиенту.

Я читал, что вы делаете что-то вроде

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

Но это не делает изображение или показывает что-либо вообще. Я знаю, что вижу массив без подписки, потому что я все еще не удалял пакет autopublish от метеор.

+0

Я не знаком с угловыми. но не было бы никаких скобок или что-то, что бы сделать «образ в изображениях» переменным циклом? Я парень Blaze & React. простите меня, если это звучит noob. –

+0

угловая часть верна, насколько я могу судить. – MrE

+0

вопрос, где вы загружаете? Метеор будет обслуживать общедоступный контент в общей папке, поэтому, если вы загружаете рис в этой папке и ссылаетесь на правильный URL-адрес в теге img, он отображает изображение при обновлении URL-адреса. Теперь вы, вероятно, рассмотрите еще одну типичную проблему в режиме dev, которая заключается в том, что перезагрузка горячего кода в триггерах Meteor, когда что-то меняется в общей папке, так что ваше приложение будет перезагружаться при загрузке изображения. Трюк, который мне пришлось использовать, - это загрузить в другую папку и написать маршрут к серверным файлам из этой папки. – MrE

ответ

2

Вы можете использовать var fileObj.url(); чтобы получить URL-адрес загруженного изображения в вашем обратном вызове. Например:

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

ваше решение работает. Я тестировал его локально, и он работает, но я спрашиваю, будет ли это делать на производстве, так как я развертываю вручную, я должен снова и снова перестраивать приложение, будет ли создание приложения снова потерять все файлы, загруженные ранее? Я не могу найти папку, которую она загружает, в url/cfs/files/images/... ' Я также сделал другое решение через nginx для загрузки в папку вне приложения и просто передал ее через nginx обратный прокси-сервер, который работает, и у меня есть папка за пределами приложения, но я не уверен, что это лучшее решение. –

Смежные вопросы