2016-05-15 9 views
0

アップロードした画像を、そのアプリケーションにアクセスした人に見せようとしています。ファイルシステムを使用して、コレクションファイルでアップロードした画像を表示する

私のプロジェクトからまだパッケージinsecuredまたはautopublishを削除していません。

私はこのような機能を持っている:次のように持っている私のmeteor mongoコンソール、私はshow.collectionsを行うとき、私はcfs.images.filerecordを取得中

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

を:

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

私は角に慣れていません。 'image in images'を可変ループにするための中かっこなどはありませんか?私はBlaze&Reactの男です。それが騒ぎになるなら、私を許してください。 –

+0

私が知る限り、角の部分は正しいです。 – MrE

+0

質問はどこにアップロードしますか? Meteorはパブリックフォルダの公開コンテンツを提供します。そのフォルダに画像をアップロードし、imgタグで適切なURLを参照すると、URLが更新されると画像が表示されます。今、別の典型的な問題、devモードではおそらくencoutnerでしょう。これは、パブリックフォルダ内で何かが変わったときにMeteorトリガのホットコードがリロードされるため、画像がアップロードされるときにアプリケーションがリロードされる可能性が高いからです。 私が使用しなければならなかったトリックは、別のフォルダーにアップロードし、そのフォルダーからサーバーファイルへのルートを書き込むことです。 – MrE

答えて

2

var fileObj.url()を使用できます。あなたの成功のコールバックでアップロードされた画像のURLを取得する。たとえば:

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

あなたのソリューションは動作します。私はそれをローカルでテストしましたが、動作していますが、私は手動で展開しているので、プロダクションでこれをやります。何度もアプリケーションを再構築する必要があります。 'url/cfs/files/images/... 'にアップロードされているフォルダを見つけることができないようです。 また、nginx経由で別の解決策を実行して、アプリケーション外のフォルダにアップロードし、 nginxリバースプロキシも同様に動作し、私はアプリの外にフォルダを持っていますが、これが最善の解決策であるかどうかはわかりません。 –

関連する問題