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

标签 ruby-on-rails rails-activestorage

我喜欢 Rails 5.2 中用于文件上传的新 ActiveStorage 模块的外观,但在我为我的网站重写大量代码之前,看起来上传只有在用户单击提交按钮时才开始。

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

最佳答案

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

使用处理文件更改事件和创建“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 更新表单,否则它不会将上传附加到您的模型对象。

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

关于ruby-on-rails - 是否可以将 ActiveStorage 配置为在附加文件后立即开始上传,而不是在单击提交按钮时开始上传?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47824245/

相关文章:

ruby-on-rails - 是否可以为 ActiveStorage 指定自定义 CDN?

ruby-on-rails - capistrano 部署后锁定的 delayed_job 行在数据库中徘徊

ruby-on-rails - Rails has_many 通过 where 条件

ruby-on-rails - AJAX Rails 验证

ruby-on-rails - 从 ActiveRecord_Associations_CollectionProxy 对象获取模型引用

ruby-on-rails - 如何使用事件存储读取.xlsx文件数据

ruby-on-rails - Rails ActiveStorage - 默认情况下加载 has_on_attached/has_many_attached 关联

ruby-on-rails - 如何测试模型中是否使用 Active Storage 发送新文件?

ruby-on-rails - rails ActiveStorage的blob表中的校验和是如何计算的

用于 Ruby on Rails 的 PHP BCrypt 设计密码