首页 文章

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

提问于
浏览
4

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

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

2 回答

  • 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

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

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

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

相关问题