2017-09-04 6 views
8

問題が正直でどこにあるのかは本当にわかりません。Dropzoneはバックエンドの有効なMIMEタイプではありませんLaravel?

私はDropzone、Laravel(5.4)となるかもしれません。だから、私も本当にこの問題を解決するのに役立つかもしれないことを願っています。私はファイルをアップロードすると

、私は、任意のJSの問題を得ることはありませんが、Laravelは(ファイルごとに)私に次のエラーがスローされます。

コール未定義のメソッドのSymfony \ Componentに\ HttpFoundationファイル\にUploadedFile \ ::ストア( )

これは私のバックエンドのコード(エラーがportfolioStore方式に設定されている)である。いずれにせよ

<?php 

namespace App\Http\Controllers; 

use App\Http\Requests\UploadPortfolioPhotoRequest; use App\PortfolioPhoto; use DebugBar\DebugBar; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; 

class AdminController extends Controller { 
    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('auth'); 
    } 

    /** 
    * Show the application dashboard. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function index() 
    { 
     return view('admin.home'); 
    } 

    public function portfolioIndex() 
    { 
     $photos = PortfolioPhoto::all(); 

     return view ('admin.portfolio.index')->with('photos', $photos); 
    } 

    public function portfolioStore(UploadPortfolioPhotoRequest $request) 
    { 
     foreach ($request->files as $photo) { 
      $filename = $photo->store('photos'); 

      $test = PortfolioPhoto::create([ 
       'filename' => $filename, 
       'title' => 'title', 
       'alt' => 'alt' 
      ]); 
     } 

     return 'Upload successful!'; 
    } 

    public function portfolioDelete() 
    { 
     return view ('admin.portfolio.index'); 
    } } 

、ここに私のドロップゾーンの設定は次のとおりです。

@extends('admin.layouts.app') 

@section('content') 
    <div class="row"> 
     <div class="col-xs-12"> 
      <div class="panel panel-default"> 
       <div class="panel-heading">Upload images</div> 

       <div class="panel-body"> 
        @if (count($errors) > 0) 
         <div class="row"> 
          <div class="col-xs-12"> 
           <div class="alert bg-danger" role="alert"><em class="fa fa-lg fa-warning">&nbsp;</em> 
            <ul style="display: inline-block;"> 
             @foreach ($errors->all() as $error) 
              <li>{{ $error }}</li> 
             @endforeach 
            </ul> 
            <a href="#" class="pull-right"><em class="fa fa-lg fa-close"></em></a> 
           </div> 
          </div> 
         </div> 
        @endif 

        <div id="actions" class="row"> 
         <div class="col-xs-12"> 
          <div class="form-group"> 
           <button class="btn btn-success fileinput-button"> 
            <i class="glyphicon glyphicon-plus"></i><span>Add files...</span> 
           </button> 
           <button type="submit" class="btn btn-primary start"> 
            <i class="glyphicon glyphicon-upload"></i> <span>Start upload</span> 
           </button> 
           <button type="reset" class="btn btn-warning cancel"> 
            <i class="glyphicon glyphicon-ban-circle"></i> <span>Cancel upload</span> 
           </button> 
          </div> 
         </div> 
        </div> 

        <div class="row"> 
         <div class="col-xs-12"> 
          <div class="files" id="previews"> 
           <div id="template" class="file-row"> 
            <div class="media"> 
             <div class="media-left"> 
              <img data-dz-thumbnail/> 
             </div> 
             <div class="media-body"> 
              <h4 class="media-heading name" data-dz-name></h4> 
              <div class="col-xs-12"><strong class="error text-danger" data-dz-errormessage></strong></div> 
              <div class="col-xs-12"> 
               <div class="col-sm-3"> 
                <p class="size" data-dz-size></p> 
                <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"> 
                 <div class="progress-bar progress-bar-success" style="width:0%;" data-dz-uploadprogress></div> 
                </div> 
               </div> 
               <div class="col-sm-9 text-right"> 
                <button class="btn btn-primary start"> 
                 <i class="glyphicon glyphicon-upload"></i> 
                 <span>Start</span> 
                </button> 
                <button data-dz-remove class="btn btn-warning cancel"> 
                 <i class="glyphicon glyphicon-ban-circle"></i> 
                 <span>Cancel</span> 
                </button> 
                <button data-dz-remove class="btn btn-danger delete"> 
                 <i class="glyphicon glyphicon-trash"></i> 
                 <span>Delete</span> 
                </button> 
               </div> 
              </div> 
             </div> 
            </div> 
           </div> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="col-xs-12"> 
      <div class="panel panel-default"> 
       <div class="panel-heading">Portfolio</div> 

       <div class="panel-body"> 
        <div class="row"> 
         @foreach($photos as $photo) 
          <div class="col-xs-6 col-md-3"> 
           <a href="#" class="thumbnail"> 
            <img src="..." alt="..."> 
           </a> 
          </div> 
         @endforeach 
        </div> 
       </div> 
      </div> 
     </div> 
    </div>@endsection 

@push('styles') 
<link href="{{asset('css/vendor/dropzone.css')}}"/> 
@endpush 

@push('scripts') 
<script src="{{asset('js/vendor/dropzone.js')}}"></script> 
<script src="{{asset('js/vendor/initialize/dropzone.cfg.js')}}"></script> 
@endpush 

だから今、私は問題は、ストアメソッドが動作しない原因未定義というMIMEタイプに関連しているかどうかを思ったんだけど:ここ は、図です。それとも私は他の場所で見るべきですか?

何かアドバイス、アイデアは

+0

がドロップゾーンが –

+0

@AatishSai初期化されたHTMLフォームを表示することができますねえお返事のためのおかげで、私は私のポストにビューを追加しました。 – Goowik

+0

foreach内で 'dd($ photo);'を実行した場合は、オブジェクトを返すか? – mbozwood

答えて

2

ここでの問題は、Laravelコードベースに$request->filesが存在しないことです。Illuminate\Http\RequestクラスはSymfony\Component\HttpFoundation\Requestクラスを拡張しているため、filesrefers toSymfony\Component\HttpFoundation\FileBagクラスには、格納方法を持たないSymfony\Component\HttpFoundation\File\UploadedFileが多数含まれています。

簡単な修正: あなたはさらにヘルプが必要な場合はコメント欄でご質問を撃つこと自由に感じなさいあなたの店の方法

を持ってIlluminate\Http\UploadedFileクラスの配列を与えるべき$request->allFiles()$request->filesを交換し

2

を:)歓迎これは私にはdropzone.jsのない問題ではないようです。 エラーは、バックエンド(laravel)の "未定義のメソッド..."と表示されるため、メソッドはオブジェクトphotoで使用できません。

laravelのドキュメントをご覧ください。 (https://laravel.com/docs/5.4/filesystem#file-uploads

たぶん、あなたはこのような何かを試すことができます。

foreach ($request->files as $photo) { 
    $path = Storage::putFile('photos', $photo); 
... 
+0

私もこれを使用すると思った:しかし、私は得る:定義されていないメソッドを呼び出すSymfony \ Component \ HttpFoundation \ File \ UploadedFile :: hashName().... – Goowik

+0

あなたはバックエンドクラスの完全なコードを提供してもよろしいですか? –

+0

バックエンド関数をクラス全体に置き換えました。 私は、要求が合格した時点でそれを含めていません。 – Goowik

1

はLaravelで

を更新しましたあなたは、パラメータとしてファイル入力の名前を取りアップロードされたファイルusing the file methodに、アクセスします。そしてthe Dropzonejs docsから:

アップロードされたファイルは、このようなHTMLの入力があっただろうかのように扱うことができます。 <input type="file" name="file" />

ので、この試してみてください。ただ、ダンプ

foreach ($request->file('file') as $photo) { 
+0

これは無効な引数として表示されます(foreach()に指定されています)。 – Goowik

+0

ファイルの入力はどのようになっていますか? –

+0

直接ファイル入力がありません。すべてがDropzoneの設定によって行われます。 – Goowik

1

をあなたの$ requestオブジェクト、dropzoneは$ request-> files配列にないbase64_encodedイメージを送るかもしれません。

Anotherway、あなたはこれがファイルを操作するために非常に有用であるパッケージ https://github.com/bnbwebexpertise/laravel-attachments

を使用することができます。

2

I私の場合は<form>タグにはenctype="multipart/form-data"のプロパティが含まれていなかっただけです。私がそれをしたら、それは働いた。そして、あなたも<form>タグを持っていないことがわかります。

<form action="/route" method="post" enctype="multipart/form-data"> 
    <!-- your code for dropzone goes here --> 
</form> 

そして、サイドノートに、あなたが持っているあなたのAdminControllerコントローラであなたのportfolioStore()方法では、

foreach ($request->allFiles() as $photo) { 
    $filename = $photo->store('photos'); 

    $test = PortfolioPhoto::create([ 
     'filename' => $filename, 
     'title' => 'title', 
     'alt' => 'alt' 
    ]); 
} 

それをしないでくださいしてください!

ここではあまりに多くの挿入クエリを作成しています。

次のようにリファクタリングします。あなたは1デシベルクエリ:)私はLaravelにストアファイルをconvieninetlyする方法を答え前回の記事で

$photos = []; 
foreach ($request->files as $photo) { 
    $filename = $photo->store('photos'); 

    $photos[] = [ 
     'filename' => $filename, 
     'title' => 'title', 
     'alt' => 'alt' 
    ]; 
} 
PortfolioPhoto::createMany($photos); 

そしてまたして逃げることができます。あなたはcheck it out hereすることができます。 $filename = $photo->store('photos');部分を改善することができます。これはあなたを助けるでしょう

希望:)

+0

これは動作しません。 $ request->ファイルは 'store'メソッドを持たない' Symfony \ Component \ HttpFoundation \ FileBag'を返します。 '$ request-> allFiles()'で '$ request-> files'を置き換えてください。 – Paras

関連する問題