2016-08-02 3 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

hmmm. так что может быть правильным способом, чтобы я мог загрузить файл (в частности, файл 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; 

Мой Dropzone определяется как это для обеспечения правильной обработки токенов

<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, переданный в App \ ExcelFile :: fromForm(), должен быть экземпляром App \ UploadedFile, экземпляр Illuminate \ Http \ UploadedFile' – Jefsama

+0

Вам нужно добавить« использовать Symfony \ Component \ HttpFoundation \ File \ UploadedFile;» на самом верху (EDIT: вставленный неверный фрагмент). Я обновлю ответ в течение второго –

+0

Это работает! Спасибо огромное! :) – Jefsama

Смежные вопросы