可以将ActiveStorage配置为在附加文件后立即开始上载,而不是单击提交按钮时?

时间:2017-12-15 00:39:48

标签: ruby-on-rails rails-activestorage

我喜欢在Rails 5.2中查找用于文件上传的新ActiveStorage模块,但在我为我的网站重写一大堆代码之前,看起来上传仅在用户点击提交按钮时开始。

是否有人知道ActiveStorage是否可以配置为在文件附加后立即上传?

2 个答案:

答案 0 :(得分:9)

是的,可以使用“DirectUpload”类的activestorage。它是一个javascript类,由activestorage在内部用于创建文件对象并直接将其上载到指定的服务上。

使用处理文件更改事件和创建“DirectUpload”类对象,可以在附加文件后立即创建直接上载文件。

这是简短的例子

import { DirectUpload } from "activestorage"

  // on file selection or change {
  const url = element.dataset.directUploadUrl
  const upload = new DirectUpload(file, url)

  upload.create((error, blob) => {
    if (error) {
      // Handle the error
    } else {
      // Add an appropriately-named hidden input to the form with a value of blob.signed_id
      $('<input>').attr({
        type: 'hidden',
        name: 'your_object[files][]',
        value: blob.signed_id
      }).appendTo('form');
    }
  })
// }

执行上传到activestorage后,您可以使用

提交表单
$("form").submit()

将这些上传附加到您的rails模型对象。请记住,您必须在其中更新带有签名ID的表单,否则它不会将上载附加到您的模型对象。

我最近在我的一个项目中使用过上述流程。

答案 1 :(得分:1)

我不认为它是内置在Active存储中的。我还没有读过Active存储中的任何此类功能。

基本上,主动存储开发背后的想法是为载波/回形针提供内置替代品,并在云s3 / google云上直接上传。

可以使用一些JS。因为您可以通过创建图像部分手动提交作为单独的表单并使用javascript提交。