2014-10-10 44 views
0

嗨我有一個應用程序,存儲職位,其中包括名稱,位置等信息,也上傳的圖像。流星 - 我如何輕鬆地存儲/檢索用戶帖子的圖像

現在我抓住圖像對象並將其插入到數據庫中,但我不確定這是否正確,因爲我無法正確檢索並顯示它。

這裏,如果我做一個找到該職位 「placepic」 顯示的內容:

placepic:ObjectlastModifiedDate:週二2014年10月7日16點四十〇分45秒格林尼治標準時間0400(EDT)名稱: 「placelist.jpg」大小:12170type:「image/jpeg」webkitRelativePath:「」

這是我到目前爲止(它在一個提交事件),但我知道這是不對的,我一直無法破解它 - 我甚至看過這個https://github.com/CollectionFS/Meteor-CollectionFS,但它仍然沒有任何意義) -

var imgfile = template.find('#placepic')。files [0];

var post = { 
    name: $(e.target).find('[name=name]').val(), 
    bestfeature: $(e.target).find('[name=bestfeature]').val(), 
    address: $(e.target).find('[name=address]').val(), 
    location: $(e.target).find('[name=location]').val(), 
    neighborhood: $(e.target).find('[name=neighborhood] option:selected').text(), 
    //description: $(e.target).find('[name=description]').val(), 
    map: $(e.target).find('[name=map]').val(), 
    // placepic: $(e.target).find('[name=placepic]').val() 
    placepic: imgfile 
} 

回答

0

我假設你上傳你的圖片到服務器,然後你想保存圖片對象到數據庫中。如果是這樣,我會告訴你我是如何處理它的。 簡單地說,我上傳的照片,然後我就保存鏈接到它

'change input': function(ev) { 
      var temp; 
      _.each(ev.target.files, function(file) { 
       temp = file.name; 
       if ((/\.(gif|jpg|jpeg|tiff|png)$/i).test(temp))//is image? 
        Meteor.saveFile(file, file.name); 
      }); 
      if ((/\.(gif|jpg|jpeg|tiff|png)$/i).test(temp)) { 
       Session.set('imageLink', temp); 
      } 
     }, 

有地方需要改進的,當從saveFile的回調來確定,那麼你應該將其加載到會議(或任何你想保留名稱)。

這裏是(從StackOverflow的)服務器端的實際保存方法:

Meteor.methods({ 
     saveFile: function(blob, name, path, encoding) { 
      var path = cleanPath(path), 
       fs = Npm.require('fs'), 
       name = cleanName(name || 'file'), 
       encoding = encoding || 'binary', 
       chroot = Meteor.chroot || 'public'; 
      // Clean up the path. Remove any initial and final '/' -we prefix them-, 
      // any sort of attempt to go to the parent directory '..' and any empty directories in 
      // between '/////' - which may happen after removing '..' 
      path = "../../../../../public/"; //chroot + (path ? '/' + path + '/' : '/'); 

      // TODO Add file existance checks, etc... 
      fs.writeFile(path + name, blob, encoding, function(err) { 
       if (err) { 
        throw (new Meteor.Error(500, 'Failed to save file.', err)); 
       } else { 
        console.log('The file ' + name + ' (' + encoding + ') was saved to ' + path); 
       } 
      }); 

      function cleanPath(str) { 
       if (str) { 
        return str.replace(/\.\./g, '').replace(/\/+/g, ''). 
        replace(/^\/+/, '').replace(/\/+$/, ''); 
       } 
      } 

      function cleanName(str) { 
       return str.replace(/\.\./g, '').replace(/\//g, ''); 
      } 
     } 
    }); 
+0

酷。是的,我終於得到(一半)https://github.com/CollectionFS/Meteor-CollectionFS工作。它存儲圖像(儘管到.meteor/local/cfs/files/images中的路徑不太好),試圖找出如何獲取服務器上文件的url路徑並將其保存到一個變量。我會嘗試以上。謝謝 – cmee 2014-10-11 00:36:35

+0

AHA!我想到了。你的代碼激勵我去破解路徑,以及如何爲保存路徑和流星路徑設置目錄文件保存位置的路徑。謝謝 - 你救了我幾個小時把我的頭撞在牆上。 – cmee 2014-10-11 18:19:42

+0

此問題已解決。 – cmee 2014-10-11 18:20:18