【问题标题】:Meteor Upload to AWS S3流星上传到 AWS S3
【发布时间】:2017-08-28 17:59:26
【问题描述】:

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

为了简单起见,我会在“创建文档”中提供一个文件选择器,一旦文件上传,URL 字段(来自 Autoform)应该在 S3 上显示文档的 URL(一旦上传),所以当单击创建按钮时,URL 最终会存储在文档集合中。我知道可能有更好的方法,但现在想保持简单。

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

我当前的代码可以在here找到。

【问题讨论】:

  • 您能否缩小错误发生的范围?例如,storeUrlInDatabase 方法调用是成功还是失败?
  • 另外,为了帮助调试,不要return exception。相反,throw new Meteor.Error('file-insert-failed', exception.toString()).
  • 因此没有错误消息。让我尝试澄清一下:文件正在正确上传到 S3,并且 URL 已添加到“文件”集合中。我可以在“文件”集合中插入对 Doc._id(上传文件所属)的引用。而不是这样做,我只想使用带有“URL”参数的“文档”集合。这样我就可以使用 Autoform 创建用户界面,然后将所有内容都插入到“文档”集合中。所以问题是如何将 S3 URL 放入“文档”URL 参数中。相当微不足道......但盯着它看。

标签: meteor


【解决方案1】:

似乎有专门解决 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. 上传完成时使用响应式 var 设置 URL(upload-to-amazon-s3 中的某处):

    template.data.urlVar.set(url);
    

我创建了a meteorpad,它展示了autoform 和S3 之外的基本思想。

【讨论】:

    猜你喜欢
    • 2014-08-05
    • 1970-01-01
    • 2020-04-02
    • 2018-07-09
    • 2016-03-14
    • 2021-12-21
    • 2015-06-17
    • 2018-01-27
    • 2018-07-12
    相关资源
    最近更新 更多