将dropzone.js与laravel

时间:2016-02-04 14:09:10

标签: laravel dropzone.js

我正在尝试将dropzone.js与laravel 5集成,但在尝试使用dd($ request)时我得到空的FileBag。

在我看来:

<form action="create-submit" class="dropzone" enctype="multipart/form-data">...</form>

我包含了dropzone.css和basic.css,我在HTML中也包含了dropzone.js。

路线:

Route::get('content/create-submit', [
    'as' => 'create-submit', 'uses' => 'ContentController@createSubmit'
]);

控制器:

public function createSubmit (Request $request) {
    dd($request);
}

我错过了什么吗?

有没有一个简单的解决方案将dropzone.js集成到laravel?请帮忙

2 个答案:

答案 0 :(得分:1)

你在JS中初始化dropzone吗?它应该自动执行,但有时它不会按预期工作。

所以我这样做。

<div class="dropzone" id="fileUpload" class="clear">
</div>

<script type="text/javascript" defer="true">
    var token = "{{ Session::getToken() }}";
    Dropzone.autoDiscover = false;
    var myDropzone = new Dropzone("div#fileUpload", {
        url: "{{ route('upload') }}",
        params: {
            _token: token
        }
    });
</script>

在这种情况下,我们也将CSRF令牌作为请求的一部分传递。

我建议使用网络开发者工具来查看上传发送到服务器时获得的响应。

更新控制器代码:

if ($request->hasFile('file') && $request->file('file')->isValid()) {
        $file = $request->file('file');
        dd($file);
}

答案 1 :(得分:0)

尝试手动初始化dropzone,如

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {

        static void clear()
        {

            Thread.Sleep(1500);
            Console.SetCursorPosition(0, 0);

        }


        static void Main(string[] args)
        {
            var client = new WebClient();          

            client.DownloadProgressChanged += (o, e) =>
            {

                Console.Write(e.ProgressPercentage + "% ");
                clear();


            };            

            client.DownloadFileAsync(new Uri("http://XXX"), "file");

            Console.ReadKey();   

        }
    }
}

并在您的控制器中

jQuery(document).ready(function () {    
var myDropzone = new Dropzone("#my-dropzone", { 
                url: "/dropzone",
                headers: {
                   'x-csrf-token': document.querySelectorAll('meta[name=csrf-token]')[0].getAttributeNode('content').value,
                }
              });
});

此外,如果没有通过标头令牌,您可能不会收到任何请求。

有关与laravel dropzone的更详细集成,您可以参考本教程Integrating Dropzone.js in Laravel 5 applications