ユーザアバターアップロード、の共通の問題を解決しましょう、より良い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');
あなたはこの小さな指数、ベストをお手伝い願っています! ;)
「」を試してください。 – ceejayoz
あなたのファイルが 'uploads'にないので、#2は動作しません。それは 'public/uploads'にあります。適切なLaravel関数 'File :: delete( 'path')'も使用することを検討してください。 – ceejayoz