"Laravel"이미지 업로드 기능을 만들어 봤습니다.
창 만들기
create.blade.php
@extends("layouts.app")
@section("content")
<h3>Create Album</h3>
{!!Form::open(["action" => "AlbumsController@store" , "method" => "POST", "enctype" => "multipart/form-data"])!!}
{{ csrf_field() }}
{{Form::text("name","",["placeholder" => "Album Name"])}}
{{Form::textarea("description","",["placeholder" => "Album Description"])}}
{{Form::file("cover_image")}}
{{Form::submit("submit")}}
{!!Form::close()!!}
@endsection
Form 외립면을 사용하여 생성합니다.'enctype'=>'multipart/form-data'는 두 개 이상의 파일을 요청에 동시에 저장하는 방식입니다.이미지를 업로드하는 폼은 필수입니다.
cover_이미지 저장 이미지 이름의 열입니다.
이미지 저장
이미지 데이터는 데이터베이스에 직접 저장되는 것이 아니라 기본적으로 이미지 자체는 정적 파일이고 이미지의 이름은 데이터베이스에 저장된다.
AlbumsController.php
public function store(Request $request)
{
//拡張子付きでファイル名を取得
$filenameWithExt = $request->file("cover_image")->getClientOriginalName();
//ファイル名のみを取得
$filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
//拡張子を取得
$extension = $request->file("cover_image")->getClientOriginalExtension();
//保存のファイル名を構築
$filenameToStore = $filename."_".time().".".$extension;
$path = $request->file("cover_image")->storeAs("public/album_covers", $filenameToStore);
$album = new Album;
$album->name = $request->input("name");
$album->description = $request->input("description");
$album->cover_image = $filenameToStore;
$album->save();
return redirect("/albums")->with("success", "Album Created");
}
이름 저장
원본 파일 이름으로 저장할 수도 있지만 가입 시간을 통해 같은 이름의 이미지를 구분할 수 있습니다.
업로드된 파일에서 파일 이름과 확장자를 가져옵니다.에서 기술한 장면은 다음 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 둘레를 분석하도록 한다.
이미지 저장
$path = $request->file("cover_image")->storeAs("public/album_covers", $filenameToStore);
브라우저에서 서버의 파일에 접근하기 위해서는 Laravel 설치 디렉터리에 있는public 디렉터리에 저장해야 합니다.따라서public 디렉터리에 저장되지만 실제 저장된 곳은/storage/app입니다.public 아래가 아니라 album_covers 이 폴더는/storage/app에서 만든 것으로 저장된 이미지가 그 안에 있습니다.
따라서public 디렉터리와/storage/app 사이에 링크가 있어야 합니다.
>php artisan storage:link
The [public/storage] directory has been linked.
phpartisanstorage:link는 실행을 통해 기호 링크를 만들 수 있고 그 사이에 링크가 있습니다.퍼블릭에서storage라는 폴더를 만들고 이미지도 저장했습니다.
이렇게 하면 브라우저에서 그림을 볼 수 있다.
저장된 이미지 표시
create.blade.php
@extends("layouts.app")
@section("content")
@if(count($albums) > 0)
<?php
$colcount = count($albums);
$i = 1;
?>
<div id="albums">
<div class="row text-center">
@foreach($albums as $album)
@if($i == $colcount)
<div class="medium-4 columns end">
<a href="/albums/{{$album->id}}">
<img class="thumbnail" src="storage/album_covers/{{$album->cover_image}}" alt="{{$album->name}}">
</a>
<br>
<h4>{{$album->name}}</h4>
@else
<div class="medium-4 columns">
<a href="/albums/{{$album->id}}">
<img class="thumbnail" src="storage/album_covers/{{$album->cover_image}}" alt="{{$album->name}}">
</a>
<br>
<h4>{{$album->name}}</h4>
@endif
@if($i % 3 == 0)
</div>
</div>
<div class="row text-center">
@else
</div>
@endif
<?php $i++;?>
@endforeach
</div>
</div>
@else
<p>No Albums To Display</p>
@endif
@endsection
저장할 때 이미지를 public/album_covers에 저장되지만 가져올 때의 경로는storage/album_나는 커버스가 되는 것에 주의하고 싶다.이미지 삭제
PhotosController
public function destroy($id)
{
$photo = Photo::find($id);
if(Storage::delete("public/photos/".$photo->album_id."/".$photo->photo))
{
$photo->delete();
return redirect("/")->with("success","Photo Deleted");
}
}
이미지의 삭제는 DB 테이블의 데이터뿐만 아니라 응용 프로그램의 저장소에서도 삭제됩니다.
Reference
이 문제에 관하여("Laravel"이미지 업로드 기능을 만들어 봤습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rope19181/items/931968e9e40d2dcad690텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)