laravel + dropzone file not uploading

匿名 (未验证) 提交于 2019-12-03 01:45:01

问题:

Why is it the file i upload not reflecting on the request even though the file is uploaded successfully?

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     } });

Controller

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

Request Preview [

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

Did i miss something or what?

回答1:

I have a controller like this

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 ... }

In my ExcelFile Model

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; }

You will also need to add UploadedFile in your Model

use symfony\Component\HttpFoundation\File\UploadedFile;

My dropzone is defined like this to ensure correct token handling

<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>

I hope this helps



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!