Meteor上传到AWS S3

时间:2015-09-29 22:34:41

标签: meteor

我有一个Meteor应用程序,我在其中将文档(标题,描述,客户......)插入数据库。该应用程序使用Autoform,Simple Schema和Collection2。我现在想添加将文件上传到S3的可能性。

为了简单起见,我会将文件选择器作为“创建文档”的一部分呈现,一旦文件上传,URL字段(来自Autoform)应显示S3上文档的URL(一旦上传),当单击创建按钮时,URL最终存储在文档集合中。我意识到可能有更好的方法,但是现在想要保持简单。

我尝试合并教程here。上传到S3工作,但我无法获取上传文件存储文件集合的URL。下面的屏幕截图显示了布局。有任何想法吗? screenshot

我的当前代码可以找到here

1 个答案:

答案 0 :(得分:0)

似乎有专门针对S3文件上传的autoform附加软件包(请参阅“文件”部分here),但由于您似乎将此作为学习机会,我将尝试解释我是怎么用核心流星来做的。

但首先,在我忘记之前,您的上传器模板是#autoForm的孩子,但拥有自己的form元素。我认为这将导致生成的HTML具有嵌套的form元素(这是禁忌)。要解决此问题,我会在{{/autoForm}}之前移动{{> uploader}},并为使用$('#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. 使用active var在上传完成时设置网址(upload-to-amazon-s3中的某处):

    template.data.urlVar.set(url);
    
  6. 我创建了a meteorpad,展示了autoform和S3背景之外的基本概念。