如何检索通过CollectionFS:S3上传到AmazonS3的图像

How do I retrieve an image uploaded to Amazon S3 via CollectionFS:S3

本文关键字:S3 AmazonS3 图像 CollectionFS 何检索 检索      更新时间:2023-09-26

在Meteor项目中,我使用CollectionFS:S3将图像保存到S3中的存储桶中。我不知道如何将它们重新加载到项目中。

我尝试使用FSFile.url()方法,如下面的代码所示,但它正在返回:/cfs/files/images/e6jQ4Txgvb37GisEQ/imagename.jpg?令牌=XXX

我期待着一个亚马逊S3网址,如S3-eu-west-1.amazonaws.commybucket/myfolder/imagename.jpg

view.html:

  {{#each images}}
    URL: {{this.url}}
    <img src="{{this.url}}" alt="thumbnail">
  {{/each}}

view.js

 images: function () {
  return images.find();
 }

我在CollectionFSgithub页面上看到的所有示例都使用url方法,所以我看不出为什么我无法访问图像。

这就是我的工作方式。

在客户端(模板或客户端文件夹)确保store变量之前已定义,并且具有相应的值。应该与您在S3配置中定义的名称相同。示例:

store = {
  bucket: 'my bucket name',
  folder: 'folder name where files are stored'
}

定义S3Url函数:

FS.File.prototype.S3Url = function(storeName) {
  var self = this;
  var store = self.getCollection().storesLookup[storeName];
  var urlHost = 'https://s3.amazonaws.com/';
  var urlPath = [store.bucket, store.folder, this.copies[storeName].key].join('/');
  return urlHost + urlPath;
}

使用后就像:

{{#each images}}
    URL: {{this.S3Url}}
    <img src="{{this.S3Url}}" alt="thumbnail">
{{/each}}

希望能有所帮助。

PS。确保store.bucket和store.folder已设置在客户端中。

这实际上是正确的。您正在从服务器获得一个url,服务器将其重定向到S3上的正确文件。

换言之,从概念上讲,服务器充当S3的代理,用于临时访问S3上的文件(因此是最后的令牌)。

如果您在服务器端检查图像集合(流星外壳),您会看到它指向S3集合中的相对路径。

如果它没有正确显示图像,就会有其他事情发生,但它应该使用cfs提供的url。