2015-09-29 183 views
0

我有一個Meteor應用程序,我在其中插入文檔(標題,描述,客戶......)到數據庫中。該應用程序正在使用Autoform,簡單模式和Collection2。我現在想增加上傳文件到S3的可能性。爲了簡單起見,我將提供一個文件選擇器作爲「創建文檔」的一部分,一旦文件上傳,URL字段(來自Autoform)應該在S3上顯示文檔的URL(一旦上傳)以便在單擊創建按鈕時最終將URL存儲在文檔集合中。我意識到可能有更好的方法,但現在想保持簡單。流星上傳到AWS S3

我試過把教程here結合起來。上傳到S3的作品,但我無法獲得上傳文件存儲文件集合的URL。下面的屏幕截圖顯示了佈局。有任何想法嗎?我的當前代碼here

+0

你能縮小發生錯誤的位置嗎?例如,'storeUrlInDatabase'方法調用是成功還是失敗? –

+0

另外,爲了幫助調試,不要'返回異常'。相反,拋出新的Meteor.Error('file-insert-failed',exception.toString())'。 –

+0

因此沒有錯誤信息。讓我試着澄清一下:文件正確地上傳到S3,URL被添加到「文件」集合中。我可以在'Files'集合中插入一個對Doc._id(上傳的文件屬於哪個)的引用。而不是這樣做,我只想使用帶'URL'參數的'Documents'集合。這樣我就可以使用Autoform創建用戶界面,然後在「文檔」集合中插入所有內容。所以問題是如何將S3 URL導入到'Documents'URL參數中。相當微不足道......但卻盯着它看。 – wiwa1978

回答

0

似乎有專門針對S3文件上傳的autoform附加軟件包(請參閱「文件」部分here),但由於您似乎將此用作學習機會,因此我會試着解釋我如何「 d用核心流星來做。

但是,首先,在我忘記之前,您的上傳模板是#autoForm的孩子,但它自己的元素是form。我認爲這將導致生成的HTML嵌套form元素(這是否定的)。要解決這個問題,我會在{{> uploader}}之前移動{{/autoForm}},併爲您的提交按鈕添加一個事件處理程序,使用$('#documentForm').submit()提交表單。注意:我沒有測試過。

現在,你的實際問題。您實質上是問如何從嵌套模板中的事件(uploader模板)中修改模板中的某些內容(url字段的值)。我會做如下:

  1. 當創建父模板的一個實例,附加ReactiveVar它,將持有上傳文件的URL。

    Template.adminDocumentNew.onCreated(function() { 
        this.url = new ReactiveVar(); 
    }); 
    
  2. 提供一個幫手來獲得反應變量。

    Template.adminDocumentNew.helpers({ 
        url: function() { 
        return Template.instance().url; 
        } 
    }); 
    
  3. 使用助手來設置窗體中的值。

    {{> afQuickField name='url' value=url.get}} 
    
  4. 傳遞反應VAR來上傳模板的數據上下文:

    {{> uploader urlVar=url}} 
    
  5. 使用無功VAR設置URL當上載完成(在upload-to-amazon-s3某處):

    template.data.urlVar.set(url); 
    

我已創建a meteorpad證明是autoform和S3範圍之外的基本思想。