Laravel 6에서 객체 스토리지를 설정하고 사용하는 방법
6287 단어 phpshowdevshortguideslaravel
이 짧은 가이드에서는 사용자 생성 콘텐츠를 저장하기 위해 S3 호환 객체 스토리지 서비스를 사용하도록 기존 Laravel 6 애플리케이션을 설정합니다. 이 설정은 S3 호환 객체 스토리지 서비스로 DigitalOcean Spaces을 사용하여 Ubuntu 18.04 LEMP 스택 위에서 실행되는 Laravel 6 애플리케이션용으로 생성되었습니다.
이 짧은 안내서는 How to Set Up a Scalable Laravel 6 Application using Managed Databases and Object Storage에 대한 자습서의 일부이며 데모 응용 프로그램을 사용하여 이 설정을 구축하는 방법에 대한 자세한 지침이 포함되어 있습니다.
Laravel은 Laravel 애플리케이션이 로컬 디스크 및 클라우드 서비스를 포함한 여러 스토리지 솔루션을 사용하고 결합할 수 있도록 하는 파일 시스템 추상화 라이브러리인
league/flysystem
를 사용합니다. s3
드라이버를 사용하려면 추가 패키지가 필요합니다.Composer을 사용하여 이 패키지를 설치합니다. 애플리케이션의 디렉터리에서 다음을 실행합니다.
composer require league/flysystem-aws-s3-v3
필수 패키지를 설치한 후 오브젝트 스토리지에 연결하도록 애플리케이션을 업데이트할 수 있습니다. 먼저
.env
파일을 열어 개체 스토리지 서비스에 대한 키, 버킷 이름 및 리전과 같은 구성 세부 정보를 설정합니다.선택한 편집기를 사용하여
.env
파일을 엽니다.다음 환경 변수를 포함하고 예제 값을 자신의 개체 저장소 구성 세부 정보로 바꿉니다.
DO_SPACES_KEY=EXAMPLE7UQOTHDTF3GK4
DO_SPACES_SECRET=exampleb8e1ec97b97bff326955375c5
DO_SPACES_ENDPOINT=https://ams3.digitaloceanspaces.com
DO_SPACES_REGION=ams3
DO_SPACES_BUCKET=sammy-travellist
완료되면 파일을 저장하고 닫습니다. 이제
config/filesystems.php
파일을 엽니다.이 파일 내에서
disks
배열에 새 디스크 항목을 만듭니다. 이 디스크의 이름을 spaces
로 지정하고 .env
파일에서 설정한 환경 변수를 사용하여 새 디스크를 구성합니다. disks
배열에 다음 항목을 포함합니다.
'spaces' => [
'driver' => 's3',
'key' => env('DO_SPACES_KEY'),
'secret' => env('DO_SPACES_SECRET'),
'endpoint' => env('DO_SPACES_ENDPOINT'),
'region' => env('DO_SPACES_REGION'),
'bucket' => env('DO_SPACES_BUCKET'),
],
여전히 동일한 파일에서
cloud
항목을 찾아 변경하여 새spaces
디스크를 기본 클라우드 파일 시스템 디스크로 설정합니다.'cloud' => env('FILESYSTEM_CLOUD', 'spaces'),
편집이 완료되면 파일을 저장하고 닫습니다. 이제 컨트롤러에서
Storage::cloud()
방법을 바로 가기로 사용하여 기본cloud
디스크에 액세스할 수 있습니다. 이러한 방식으로 애플리케이션은 여러 스토리지 솔루션을 사용할 수 있도록 유연하게 유지되며 환경별로 공급자 간에 전환할 수 있습니다.예를 들어 방문한 장소의 사진을 저장하는 여행 사진 앨범 애플리케이션이 있다고 가정해 보겠습니다. 양식을 사용하면 사진을 업로드하고 장소를 선택하거나 새 장소를 만들 수 있습니다. 다음은 새로운
spaces
S3 호환 디스크를 사용하는 업로드 컨트롤러의 모습입니다.<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Photo;
use App\Place;
use Illuminate\Support\Facades\Storage;
class PhotoController extends Controller
{
public function uploadForm()
{
$places = Place::all();
return view('upload_photo', [
'places' => $places
]);
}
public function uploadPhoto(Request $request)
{
$photo = new Photo();
$place = Place::find($request->input('place'));
if (!$place) {
//add new place
$place = new Place();
$place->name = $request->input('place_name');
$place->lat = $request->input('place_lat');
$place->lng = $request->input('place_lng');
}
$place->visited = 1;
$place->save();
$photo->place()->associate($place);
$photo->image = $request->image->store('/', 'spaces'); #save image
Storage::setVisibility($photo->image, 'public'); #make it public
$photo->save();
return redirect()->route('Main');
}
}
이 파일은 Github에서도 사용할 수 있습니다.
사진이 데이터베이스에 저장되면
Storage::url
메서드를 호출하여 공개 URL을 얻을 수 있습니다. 다음 코드는 블레이드 템플릿에서 이미지 URL을 가져오는 방법의 예를 보여줍니다.<img src="{{ Storage::disk('spaces')->url($photo->image) }}" />
자세한 지침과 예는 How to Set Up a Scalable Laravel 6 Application using Managed Databases and Object Storage에서 전체 가이드를 확인하십시오.
Reference
이 문제에 관하여(Laravel 6에서 객체 스토리지를 설정하고 사용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/digitalocean/how-to-set-up-and-use-object-storage-in-laravel-6-36ak텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)