2016-05-15 103 views
0

我试图将我上传的图像显示给访问该应用程序的人。使用文件系统显示使用collectionfs上传的图像

我还没有从我的项目中删除包insecuredautopublish

我有这样一个功能:

$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的家伙。如果听起来不错,请原谅我。 –

+0

角度部分是正确的,据我所知。 – MrE

+0

问题是你在哪里上传? Meteor将在公共文件夹中提供公共内容,因此如果您在该文件夹中上传图片,并且您在img标签中引用了正确的URL,则会在更新url时显示图片。现在,您可能会在开发模式中设置另一个典型问题,即当公用文件夹中的某些内容发生更改时,Meteor中重新加载的热代码会触发,因此您的应用程序在上传图像时可能会重新加载。 我不得不使用的技巧是上传到另一个文件夹,并从该文件夹中写入到服务器文件的路径。 – MrE

回答

2

你可以使用var fileObj.url();在成功回调中获取上传图片的网址。例如:

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

您的解决方案有效。我已经在本地进行了测试并且它正在工作,但是我会问,在生产中会这样做,因为我正在手动部署,所以我不得不一遍又一遍地重建应用程序,再次构建应用程序意味着丢失之前上传的所有文件?我似乎无法找到该文件夹​​上传到'url/cfs/files/images/...' 我也通过nginx做了另一个解决方案,上传到应用程序之外的文件夹,并通过它nginx反向代理,它的工作原理以及我在应用程序之外的文件夹,但我不知道这是否是最好的解决方案。 –