我喜欢 Rails 5.2 中用于文件上传的新 ActiveStorage 模块的外观,但在我为我的网站重写大量代码之前,看起来上传只有在用户单击提交按钮时才开始。
有谁知道 ActiveStorage 是否可以配置为在附加文件后立即上传?
我喜欢 Rails 5.2 中用于文件上传的新 ActiveStorage 模块的外观,但在我为我的网站重写大量代码之前,看起来上传只有在用户单击提交按钮时才开始。
有谁知道 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 更新表单,否则它不会将上传附加到您的模型对象。
我最近在我的一个项目中使用了上述流程。
我不认为它内置在活动存储中。我还没有阅读过 Active storage 中的任何此类功能。
基本上,Active storage 开发背后的想法是提供载波/回形针的内置替代品,并直接上传到 cloud s3/google cloud。
可以使用一些 JS。因为您可以通过将图像部分创建为单独的表单并使用 javascript 提交来手动提交。