2016-10-16 7 views
0

私のLaravel 5プロジェクトでは、パブリックフォルダのサブフォルダに画像をアップロードしました。例:public/uploads/logo/imagename.jpg。画像が正常にアップロードされますが、私は2つの問題を抱えて:Laravel 5:アップロードされた画像を表示できません。ファイル許可

  1. 私は<img src="uploads/logos/imagename.jpg">を使用してビューの画像を表示することはできませんが。エラーは、ファイルが見つからないことを示します。

  2. 画像を削除するには、コードの下に使用して、私は、ファイルのアクセス許可の別の問題だ:

    $パス=「アップロード/ロゴ/ imagename.jpg」を。 if(file_exists($ path)){unlink($ path); }

正しくアップロードする方法、アップロードしたファイルを削除する方法、アップロードした画像を表示する方法をお伝えください。

おかげで、Naren

+0

」を試してください。 – ceejayoz

+0

あなたのファイルが 'uploads'にないので、#2は動作しません。それは 'public/uploads'にあります。適切なLaravel関数 'File :: delete( 'path')'も使用することを検討してください。 – ceejayoz

答えて

0

ユーザアバターアップロード、の共通の問題を解決しましょう、より良いexponationのために、あなたのため、この問題を解決することができ、いくつかのlaravelとサードパーティの機能があります。

あなたは持っているが、以下のフォーム:あなたはaccept-charsetを置く必要があることに注意し、ファイルをアップロードするためのフォームをある

<form method="POST" action="/avatar" accept-charset="UTF-8" enctype="multipart/form-data"> 
{{ csrf_field() }} 
     <div> 
      <input name="avatar" type="file"> 
     </div> 
<div class="margin-top-10"> 
    <input type="submit" class="btn green" value="Submit" /> 
</div> 

およびenctype属性はファイルフィールドの順番でバックエンドで機能します。この後、あなたは、単にこのアクションとして、あなたはProfileControllerクラスを持っている想像し、アバターをアップロードするために、あなたのコントローラーを行う必要があります。あなたはそれで、$request->file(avatar)を使用してフロントエンドフォームからファイルを取得することができ

public function set_profile_picture(Request $request) { 
     $user = $request->user(); 
     if (!$request->hasFile('avatar')) { 
      Flash::error('Avatar not found'); 
      return redirect('/profile'); 
     } 
     $path = $request->file('avatar')->store('avatars'); 
     $user->avatar = $path; 
    $user->save(); 
    return redirect('/profile'); 
} 

チェックそう、Route::post('/avatar', 'Auth\\[email protected]_profile_picture');

そして最後に、あなたは絵がLaravelでStorageファサードによって作られているサーバーにファイルを格納し、あなたは選択肢に持って、アップロードを示すために別のものを行う必要があります行って、あなたはルートを定義する必要があります彼らはstorageという名前のフォルダに入っているため、これらのファイルに一般にアクセスできないことがわかります。いつでもフロントコントローラーとそのすべてのものを持っているpublicフォルダーにアバターを含むフォルダーへのシンボリックリンクを作成しますが、gitのようなVCSを使用している場合、このシンボリックリンクにより将来問題が発生する可能性があります。これを行うための最も安全な方法は、お使いのストレージでのプライベートファイルにアクセスするには、以下をごコントローラーで別のアクションを定義することですこれを行うには良い方法です:

Route::get('avatars/{filename}', function ($filename) { 

    $path = storage_path() . '/app/avatars/' . $filename; 
    if(!File::exists($path)) abort(404); 

    $file = File::get($path); 
    $type = File::mimeType($path); 

    $response = Response::make($file, 200); 
    $response->header("Content-Type", $type); 

    return $response; 
}); 

あなたはストレージファサードに関する詳細な情報を見つけることができますララベルの公式文書では、ファイルのリンクを解除する簡単です\Storage::Delete('/path/to/file.jpg');

あなたはこの小さな指数、ベストをお手伝い願っています! ;)

+0

ご返信ありがとうございました。ご迷惑をおかけして申し訳ありません。私は、URLから "public"を削除したので、サブフォルダ "jobs"にファイルを移動したために問題が発生していることを認識しています。それから、__DIR __を必要とするように変更しました。 '/ jobs/bootstrap/autoload.php'; $ app = require_once __DIR __。 '/ jobs/bootstrap/app.php';私のindex.phpファイル(ルートディレクトリ内)にあります。それらのアップロードされた画像を表示する方法を除いて、すべてうまく動作します。 このことについて親切に助言してください – Naren

関連する問題