使用laravel的Dropzone,显示419错误

ykejflvf  于 2023-01-31  发布在  其他
关注(0)|答案(2)|浏览(121)

我已经测试了我所看到的一切,但它对我不起作用,我正在使用的dropzone与laravel和我的问题是,它显示了419错误,我知道这意味着什么,这是关于csrf令牌,但我不能修复它。
我的HTML代码是这样的:

<div id="my-dropzone" class="dropzone"></div>

我的javascript代码是这样的:

Dropzone.autoDiscover = false;

$(document).ready(function(){

   $('#my-dropzone').dropzone({
      url: 'http://54.161.128.196/pre_image/store',
      headers: {
        'X-CSRF-TOKEN': $('meta[name="token"]').attr('content')
      },
      method: 'post',
      dictResponseError: 'Error uploading file!'
   });

});

我的Laravel路线:

Route::post('/pre_image/store', 'Pre_ImageController@store');

我把这个放在中间件中,看看是否可以删除419错误:
它位于VerifyCsrfToken中间件中

protected $except = [
    'pre_image/store'
];

它没有工作,我有csrf令牌在 meta如下:

<meta name="csrf-token" content="{{ csrf_token() }}">

这是错误的屏幕截图:

所以我想知道是什么问题,为什么它显示419错误,如果它的路由被禁用,以验证令牌,甚至它有令牌分配?
谢谢!

0mkxixxg

0mkxixxg1#

我在使用Dropzone时也遇到过类似的问题,最后我把头文件拉到页面顶部的ajax函数中,而不是DZ头文件部分,这使得任何普通的ajax请求都可以有正确的CSRF。
试试这个:

$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});
ghhkc1vu

ghhkc1vu2#

如果其他人在表单中上传图像时遇到这个问题,并且上面的解决方案不起作用,那么我的解决方案是:我找到了在网页上生成src数据的Javascript代码。
我的情况是这样的:

$('#'+newId).attr('src', canvas.toDataURL());

问题是它默认为PNG文件,这是非常大的。如果你改变它如下,你会有一个小得多的文件,这将是更容易上传。

$('#'+newId).attr('src', canvas.toDataURL('image/jpeg', 0.7));

这将产生一个小得多的上传文件。我的问题是,如果我试图上传超过3张图片,我会得到错误信息。如果质量不够好,改变0.7到0.8。

相关问题