laravel + dropzone文件无法上传

时间:2016-08-02 05:00:12

标签: php laravel laravel-5.2 dropzone.js

为什么我上传的文件没有反映在请求上,即使文件上传成功了?

HTML

<div id="upload_excel" class="dropzone form-control">

    <div class="fallback">
        <input name="file" type="file" multiple />
    </div>

</div>

JS

var baseUrl = "{{ url('/') }}";
var token = "{{ Session::getToken() }}";

Dropzone.autoDiscover = false;

var myDropzone = new Dropzone("#upload_excel", {
    paramName: "file",
    acceptedFiles: ".xls,.xlsx",
    maxFiles: 1,
    maxFilesize: 10,
    url: baseUrl + "/upload",
    params: {
        _token: token
    }
});

控制器

class UploadsController extends Controller
{
    public function upload(Request $request) {
        return $file = $request->all();
    }
}

请求预览 [enter image description here 请求回复

{"_token":"ePssa9sPZxTcRR0Q4Q8EwWKjODXQ8YpCcH8H9wRP","upload_date":"2016-08-02","file":{}}

我错过了什么或什么?

1 个答案:

答案 0 :(得分:1)

我有一个像这样的控制器

public function upload(Request $request) {
    // validation etc
    // ...

    // I have a table and therefore model to list all excels
    $excelfile = ExcelFile::fromForm($request->file('file'));

    // return whater ...
}

在我的ExcelFile模型中

protected   $baseDir = 'uploads/excels';

public static function fromForm(UploadedFile $file) {
    $excelfile = new static;

    $name = time() . $file->getClientOriginalName();
    $name = preg_replace('/\s+/', '', $name);
    $excelfile->path = $excelfile->baseDir . '/' . $name;

    $file->move($excelfile->baseDir, $name);

    return $excelfile;
}

您还需要在模型中添加UploadedFile

use symfony\Component\HttpFoundation\File\UploadedFile;

我的dropzone定义如下,以确保正确的令牌处理

<form action="/users/{{ $id }}/media/excelupload" id="drop-zone" class="dz dropzone">
    {{ csrf_field() }}
</form>

<script>

    new Dropzone("#drop-zone", { 
        maxFilesize: 3, // MB
        maxFiles: 10,
        dictDefaultMessage: "Upload Excel.",
        init: function() {
            var known = false;
            this.on("success", function(file, responseText) {
                // do stuff
            });
            this.on('error', function() {
               // aler stuff
            });
            this.on("addedfile", function() {
                if (this.files[10]!=null){
                    this.removeFile(this.files[0]);
                    if (known === false) {
                        alert('Max. 10 Uploads!')
                        known = true;
                    }
                }
            });
        }
    });
</script>

我希望这会有所帮助