【问题标题】:Get name attribute from dropzone using Laravel使用 Laravel 从 dropzone 获取名称属性
【发布时间】:2017-10-21 22:33:16
【问题描述】:

我正在使用带有 L5.5 的 Dropzone,我想为个人资料存储一张图片,为图库存储多张图片。 我把paramName:放到了Dropzone配置中,但是我不能上传Dropzone的两个实例,只有一个。

给我一​​个错误:http://127.0.0.1/project/public/dropzone/store500(内部服务器错误)

我的看法:

<div class="col-md-12">
    <h1>Upload Multiple Images</h1>
    {!! Form::open([ 'route' => [ 'dropzone.store' ], 'files' =>  true, 'enctype' => 'multipart/form-data', 'class' => '', 'id' => '' ]) !!}            
        <div class="dropzone" id="image-upload1">
            <h3>Upload Multiple Image By Click On Box</h3>
        </div>

        {!! Form::text('name'); !!}

        <div class="dropzone" id="image-upload">
            <h3>Upload Multiple Image By Click On Box</h3>
        </div>

       <button type="submit" class="btn btn-success" id="submit-all">OK</button>

   {!! Form::close() !!}
</div>

我的 Dropzone js:

Dropzone.autoDiscover = false;

//>>> IMAGE 1
var myDropzone1 = new Dropzone("div#image-upload1", { 
    url: "dropzone/store",
    paramName: "profile",
    autoProcessQueue:false,
    uploadMultiple: true,
    maxFilesize:5,
    maxFiles:1,
    acceptedFiles: ".jpeg,.jpg,.png,.gif",
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    init: function(){
        myDropzone1 = this; // closure
        var btn1 = document.querySelector("#submit-all");
        btn1.addEventListener("click", function(e) {
            e.preventDefault();
            e.stopPropagation();
            //myDropzone1.processQueue(); // Tell Dropzone to process all queued files.
        });
    }
});
// MULTIPLE THE SAME LIKE ONE

$("#submit-all").click( function(e){
    e.preventDefault;
    myDropzone1.processQueue();
    //myDropzone.processQueue();
    //$( "#foo" ).trigger( "click" );
});

在我的控制器上:

public function dropzoneStore(Request $request)
{
    $dir = public_path().'/upload/';

    $files1 = $request->file('profile');

    foreach($files1 as $file1){
        $fileName1 = $file1->getClientOriginalName();
        $file1->move($dir, $fileName1);
    }

    // FOR MULTIPLE
    $files = $request->file('images');
    foreach($files as $file){
        $fileName = $file->getClientOriginalName();
        $file->move($dir, $fileName);
    }
}

【问题讨论】:

  • 启用调试:ini_set('display_startup_errors',1); ini_set('display_errors',1);错误报告(E_ALL);并检查您的日志文件是否有任何错误
  • 500 server error 只是一个通用消息,真正的错误会告诉你到底出了什么问题,将在你的storage/logs/laravel.log 和/或你的网络服务器(Apache、nginx)和/或 PHP 日志。真正的错误是什么?
  • 这是 laravel 的错误:C:\xampp\htdocs\project\vendor\laravel\framework\src\Illuminate\Routing\RouteCollection.php 在这一行:throw new MethodNotAllowedHttpException($others) ; -------- laravel.log 给了我这个:C:\\xampp\\htdocs\\project\\public\\index.php(55): Illuminate\\Foundation\\Http\\Kernel- >句柄(对象(照亮\\Http\\Request))
  • @Leoh 好的,这表明了真正的问题 - 我已经添加了答案,请看一下。
  • 我现在正在尝试..我的 chrome 网络开发工具上有这个..消息:“为 foreach() 提供的参数无效”,异常:“ErrorException”,行是:foreach( $files1 as $file1){ $fileName1 = $file1->getClientOriginalName(); $file1->move($dir, $fileName1); }

标签: laravel laravel-5 dropzone.js


【解决方案1】:

你需要做的是

  • 如果您通过 Ajax 进行上传,请创建 2 个不同的表单

  • 如果您通过 POST 上传,则创建 2 个不同的输入

我过去也遇到过类似的问题,但这是一个令人担忧的问题。

目前你在同一个表单上有两个 Dropzones,但我认为 Dropzone 创建了它自己的表单。

另外,更好地检查 500 错误,也许可以为您提供有关正在发生的事情的线索。查看storage/logs/laravel.log,如果没有任何用处,请查看您的网络服务器日志。

【讨论】:

  • 我只想以一种形式保存所有输入,如果我把它工作正常,但是当我使用两个 paramName 时给了我一个错误。 $files = $request->file('file'); foreach($files as $file){ $fileName = $file->getClientOriginalName(); $file->move($dir, $fileName); }
【解决方案2】:

从您的评论来看,真正的错误是:

C:\xampp\htdocs\project\vendor\laravel\framework\src\Illumin‌​ate\Routing\RouteCol‌​lection.php 在这一行: throw new MethodNotAllowedHttpException($others);

MethodNotAllowedHttpException 表示您没有为您提出的请求设置合适的路线。通常这类似于 POST 到仅设置了 GET 路由的 URL,或 redirect()ing - 发出 GET - 在成功处理 POST 到仅设置了 POST 路由的 URL 之后。

另一种常见情况是,如果您在接收 POST 的方法中进行了验证。如果验证失败,Laravel will redirect() 会返回上一页,并发出 GET 请求。您需要设置一个 GET 路由才能正常工作。

由于您确实设置了正确的 POST 路由(在您的 cmets 中进行了描述),因此它必须是其他情况之一。

【讨论】:

  • 当然我有一个路由:Route::post('dropzone/store', ['as'=>'dropzone.store','uses'=>'HomeController@dropzoneStore']) ;也许问题是使用两个 request->file();
  • @Leoh MethodNotAllowedHttpException 表示对现有路由发出请求,但使用不同的方法 - 例如,对仅配置了 GET 的路由发出 POST 请求等。查看浏览器开发工具网络选项卡 - 哪个请求引发错误?
  • 或者可能是在您的dropzoneStore 方法完成后发生的请求 - 例如,使用 GET 到某个“成功”页面的redirect(),该路由未配置? dropzoneStore 方法完成后会发生什么,是否在某处发生了重定向或新请求?
猜你喜欢
  • 1970-01-01
  • 2018-11-16
  • 2020-09-14
  • 2019-01-24
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
相关资源
最近更新 更多