Rails中的Dropzone + Active Storage事件侦听器

时间:2019-02-13 04:55:44

标签: ruby-on-rails addeventlistener dropzone.js dom-events rails-activestorage

我正在使用dropzone和活动存储来上传文件,直接从客户端将文件上传到s3服务器。目前,我正在通过dropzone的addedfile事件从dropzone获取文件,并通过new ActiveStorage.DirectUpload(file, url);上传文件。现在,根据文档,他们提供了一些事件侦听器,我可以使用这些事件侦听器向用户显示上载进度,但是只有当我使用常规表单和提交按钮时,它们才起作用。如果我通过Javascript上传文件,则无法使用。 这是我的代码:

dropzone.on("addedfile", function (file) {
    const upload = new ActiveStorage.DirectUpload(file, url);
    upload.create((error, blob) => {
        if(error) return;
        alert('file uploaded');
    }
}


addEventListener("direct-upload:start", event => {
    console.log('This does not work');
})

1 个答案:

答案 0 :(得分:0)

DirectUpload不调度事件。

DirectUploadController可以,它使用DirectUpload进行实际的上载,就像您在示例代码中所做的一样。您无需侦听DirectUploadController中的事件,因为您可以推断事件将在何时分派。

要执行您期望发生direct-upload:startdirect-upload:end事件的操作,请将代码更改为:

dropzone.on("addedfile", function (file) {
    const upload = new ActiveStorage.DirectUpload(file, url);

    console.log("direct-upload:start") 

    upload.create((error, blob) => {
        if(error) {
            console.log("direct-upload:error") 
            return;
        }
    }

    console.log("direct-upload:end")
}