2016-08-02 64 views
0

爲什麼即使文件上傳成功,我上傳的文件沒有反映出請求?laravel + dropzone文件無法上傳

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":{}} 

我錯過了什麼還是什麼?

+0

那麼你實際上並沒有在你的後端做任何事情。它可能只是無法解析爲一個resposne? –

+0

嗯。所以我可以上傳一個文件(特別是excel文件)從dropzone到數據庫的正確方式是什麼? – Jefsama

+0

響應標籤裏有什麼? – Chris

回答

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; 

我的懸浮窗就像是定義一個控制器這確保了正確的令牌處理

<form action="https://stackoverflow.com/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> 

我希望這有助於

+0

我按照你的例子,得到這個錯誤:'類型錯誤:參數1傳遞給應用程序\ ExcelFile :: fromForm()必須是應用程序\ UploadedFile,實例Illuminate \ Http \ UploadedFile' – Jefsama

+0

您需要添加「使用symfony的\分量\ HttpFoundation \文件\ UploadedFile的;」在最上面(編輯:粘貼錯誤的代碼片段)我會在第二個更新答案 –

+0

它的工作原理!非常感謝! :) – Jefsama