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

あなたは実際にバックエンドのファイルで何もしていません。それは単にレスポンスに解析できないかもしれませんか? –

+0

hmmm。だから私は適切な方法であることができますので、私はファイル(特にExcelファイル)をdropzoneからデータベースにアップロードできますか? – Jefsama

+0

レスポンスタブには何がありますか? – Chris

答えて

1

私が持っている

use symfony\Component\HttpFoundation\File\UploadedFile; 

私のドロップゾーンは以下のように定義されて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を追加する必要があります私はこの

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

のようなコントローラこれにより、正しいトークン処理を保証する。

<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

" use symfony \ Component \ HttpFoundation \ File \ UploadedFile; "一番上にある(編集:間違ったスニペットを貼り付けて)私は二番目に答えを更新します –

+0

それは動作します!どうもありがとうございます! :) – Jefsama