是否可以在没有文件输入的情况下使用 ActiveStorage?

Is it possible to use ActiveStorage without a file input?

我还没有看到关于此事的任何文件,但要详细说明:

我想使用活动存储在我的 rails 应用程序中上传文件,而无需使用浏览器的文件输入元素。无论是使用 Drag/Drop 还是各种自定义文件选择器,最好告诉 ActiveStorage 上传文件并保存它而无需使用文件输入元素。

此外:据我所知,不允许隐藏文件输入并设置其文件内容(作为一种变通方法)。

这可能吗?有没有人举例说明如何在没有文件输入元素的情况下完成此操作?

您可以使用 DirectUpload class 来达到这个目的。从您选择的库中接收到文件后,实例化一个 DirectUpload 并调用其 create 方法。 create 在上传完成时调用回调:

import { DirectUpload } from "activestorage"

// on file selection/drop {
  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
    }
  })
// }

这 class 是未记录的 Rails API 是内部的规则的罕见例外。我们只是还没有开始记录它。