我正在尝试将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?请帮忙
答案 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