Dropzone处理队列不适用于服务器端验证

Posted

技术标签:

【中文标题】Dropzone处理队列不适用于服务器端验证【英文标题】:Dropzone Processing Queue not working on server side validation 【发布时间】:2019-12-12 03:03:53 【问题描述】:

我正在使用 Laravel 5.8 并在表单中集成了 dropzone。在我的表单中,我在服务器端有帖子标题唯一验证。

问题场景是

1.用户将输入博客文章标题并在dropzone中添加5张图片。

2.如果输入的标题已经存在则验证错误

3.再次验证错误后,如果我们尝试提交表单,那么请求将不会发送到服务器。这意味着dzClosure.processQueue();失败

document.getElementById("submitArticleFormButton").addEventListener("click", function(e) 
 if (dzClosure.files.length>0) 
                        ;

                        dzClosure.processQueue(); 
                     else 

                        dzClosure.uploadFiles([]);


                    

我该如何解决这个问题。

当我参考以下文档时发现的一些问题时 https://github.com/enyo/dropzone/wiki/FAQ#how-to-show-an-error-returned-by-the-server

即使在我的情况下,当验证错误抛出时,它也会是 419,但仍无法按预期工作

更新 我只有在服务器端验证工作正常时才会出现问题。即使在验证后如果我添加额外的图像然后如果我尝试提交然后它会正常工作。 即使我已经包含了 csrf 令牌和 419 它的自定义标头集

  public function respond($data, $headers = [])
    
        $data['error']="error occured";
        return response()->json($data,419, $headers);
    

【问题讨论】:

【参考方案1】:

您是否已将您的 CSRF 令牌附加到 dropzone 标头?不久前我遇到了同样的问题,并且能够通过使用带有 Dropzone 的 CSRF 令牌标头来解决它。

首先,您需要打印我们的 CSRF 令牌


   var CSRF_token = % csrf_token %;

然后将其包含在您的请求中。

   sending: function(file, xhr, formData) 
      formData.append("csrf_token", CSRF_token);
   

更新答案,

尝试手动将 Dropzone 文件状态更新为 Queued,以便 dropzone 再次上传相同的图像。

dzClosure.files.forEach(file => 
   file.status = Dropzone.QUEUED
)

【讨论】:

它已经存在了。即使我没有验证错误,我也可以成功提交。即使验证错误,如果我添加额外的图像,它也会成功上传 哦。我认为 dropzone 没有更新文件状态。尝试将 dropzone 文件状态更新为 file.status = Dropzone.QUEUED 但是,自 IIRC 以来,您必须使用 javascript 每种方法遍历 files 数组,文件没有附加 status @Coding.i 会尝试的。谢谢你。我认为你的评论肯定有一些线索。 @CodingSomthing。感谢您的回答。它对我帮助很大。花了很多时间来理解解决这个问题。但无法成功。非常感谢

以上是关于Dropzone处理队列不适用于服务器端验证的主要内容,如果未能解决你的问题,请参考以下文章

HornetQ:从队列中删除所有消息,不适用于队列中的消费者

Reactstrap 不适用于 Razzle 服务器端渲染

React Context 不适用于服务器端渲染

DataTables 分页似乎不适用于服务器端数据

Azure Api 规则不适用于使用具有身份验证基本和身份验证证书的默认助手

为啥服务器端分页不适用于我的 jquery 数据表?