{"id":28572,"date":"2021-05-28T14:25:00","date_gmt":"2021-05-28T11:25:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28572"},"modified":"2021-10-18T03:41:24","modified_gmt":"2021-10-18T00:41:24","slug":"jak-przeslac-plik-do-s3-za-pomoca-systemu-plikow-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/jak-przeslac-plik-do-s3-za-pomoca-systemu-plikow-laravel\/","title":{"rendered":"Jak przes\u0142a\u0107 plik do S3 za pomoc\u0105 systemu plik\u00f3w Laravel?"},"content":{"rendered":"<p>Niedawno opublikowa\u0142em artyku\u0142 <a href=\"https:\/\/themewp.inform.click\/pl\/przeslij-pliki-do-amazon-s3-za-pomoca-aws-php-sdk\/\" title=\"Prze\u015blij pliki do Amazon S3 za pomoc\u0105 AWS PHP SDK\" >Prze\u015blij pliki do Amazon S3 za pomoc\u0105 AWS PHP SDK<\/a>. Jeden z naszych czytelnik\u00f3w zapyta\u0142, jak wykona\u0107 operacje przesy\u0142ania plik\u00f3w AWS S3 za pomoc\u0105 Laravela. Je\u015bli chodzi o Laravela, musimy pod\u0105\u017ca\u0107 inn\u0105 \u015bcie\u017ck\u0105 ni\u017c PHP. W tym artykule dowiemy si\u0119, jak przes\u0142a\u0107 plik do S3 za pomoc\u0105 systemu plik\u00f3w Laravel.<\/p>\n<p><a href=\"https:\/\/laravel.com\/docs\/master\/filesystem\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Filesystem<\/a> zapewnia r\u00f3\u017cne sterowniki do pracy z lokalnym systemem plik\u00f3w, Amazon S3, Rackspace itp. Sterowniki te zapewniaj\u0105 wygodny i \u0142atwy spos\u00f3b przesy\u0142ania plik\u00f3w lokalnie lub w chmurze.<\/p>\n<p>Amazon S3 to popularna us\u0142uga do przechowywania obraz\u00f3w, plik\u00f3w i dokument\u00f3w. Po drugie, przechowywanie plik\u00f3w w chmurze pozwoli zaoszcz\u0119dzi\u0107 du\u017co przepustowo\u015bci dla Twojej witryny. Oszcz\u0119dza miejsce na hostingu, a wydajno\u015b\u0107 chmury jest skalowalna.<\/p>\n<p>Powiedziawszy to, przyjrzyjmy si\u0119, jak przes\u0142a\u0107 plik do S3 za pomoc\u0105 systemu plik\u00f3w Laravel.<\/p>\n<h3>Uzyskaj po\u015bwiadczenia bezpiecze\u0144stwa AWS<\/h3>\n<p>Aby rozpocz\u0105\u0107 korzystanie z S3, powiniene\u015b mie\u0107 konto w <a href=\"https:\/\/aws.amazon.com\/s3\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Amazon Web Services<\/a>. Gdy ju\u017c to zrobisz, upewnij si\u0119, \u017ce aktywujesz us\u0142ug\u0119 S3.<\/p>\n<p>Po aktywacji us\u0142ugi S3 zdob\u0105d\u017a swoje dane uwierzytelniaj\u0105ce, kt\u00f3rych b\u0119dziemy potrzebowa\u0107 w dalszej cz\u0119\u015bci samouczka.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20443-6081f26f1f0bf.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20443-6081f26f1f0bf.png\" alt=\"Jak przes\u0142a\u0107 plik do S3 za pomoc\u0105 systemu plik\u00f3w Laravel?\" ><\/a><\/p>\n<h3>Konfiguracja sterownika S3 w Laravel<\/h3>\n<p>Jak powiedzia\u0142em, zamierzam u\u017cywa\u0107 systemu plik\u00f3w Laravel. Wymaga skonfigurowania sterownika S3. Udaj si\u0119 do edytora i otw\u00f3rz plik <code>config\/filesystems.php<\/code>. W tym pliku mo\u017cesz zobaczy\u0107 sterownik zdefiniowany dla S3 w 'dyskach&#8217;.<\/p>\n<p><strong>config\/filesystems.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\nreturn [\n\u00a0\n\u00a0\u00a0\u00a0\u00a0.....\n\u00a0\n\u00a0\u00a0\u00a0\u00a0'disks' =&gt; [\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.....\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0's3' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'driver' =&gt; 's3',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'key' =&gt; env('AWS_ACCESS_KEY_ID'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'secret' =&gt; env('AWS_SECRET_ACCESS_KEY'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'region' =&gt; env('AWS_DEFAULT_REGION'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'bucket' =&gt; env('AWS_BUCKET'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'url' =&gt; env('AWS_URL'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'endpoint' =&gt; env('AWS_ENDPOINT'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\n\u00a0\u00a0\u00a0\u00a0],\n];<\/code><\/pre>\n<p>W powy\u017cszym kodzie Laravel u\u017cywa metody env() do ustawiania warto\u015bci. Oznacza to, \u017ce musisz zdefiniowa\u0107 te sta\u0142e w swoim <code>.env<\/code>pliku. Nie musisz definiowa\u0107 sta\u0142ych AWS_URL i AWS_ENDPOINT, poniewa\u017c nie jest to wymagane do przesy\u0142ania plik\u00f3w do zasobnika S3.<\/p>\n<pre><code>AWS_ACCESS_KEY_ID=\nAWS_SECRET_ACCESS_KEY=\nAWS_DEFAULT_REGION=\nAWS_BUCKET=<\/code><\/pre>\n<p>Dodaj warto\u015b\u0107 do ka\u017cdej sta\u0142ej powy\u017cej. Nast\u0119pnie otw\u00f3rz terminal w katalogu g\u0142\u00f3wnym projektu i uruchom polecenie:<\/p>\n<pre><code>composer require league\/flysystem-aws-s3-v3 ~1.0<\/code><\/pre>\n<p>To polecenie zainstaluje wymagan\u0105 bibliotek\u0119, kt\u00f3ra wywo\u0142uje API AWS i wykonuje operacje w chmurze.<\/p>\n<h3>Prze\u015blij plik do S3 w Laravel<\/h3>\n<p>Wszyscy ustawiamy si\u0119 z podstawow\u0105 konfiguracj\u0105. Teraz mo\u017cemy przej\u015b\u0107 do w\u0142a\u015bciwej cz\u0119\u015bci przesy\u0142ania plik\u00f3w. Stw\u00f3rzmy prosty formularz z wej\u015bciem pliku i przyciskiem prze\u015blij.<\/p>\n<p>Dodaj poni\u017cszy kod do pliku ostrza.<\/p>\n<pre><code>&lt;form action=\"{{ url('ROUTE_URL') }}\" method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label for=\"exampleInputFile\"&gt;File input&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" name=\"profile_image\" id=\"exampleInputFile\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0{{ csrf_field() }}\n\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\" class=\"btn btn-default\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Zast\u0105p symbol zast\u0119pczy ROUTE_URL rzeczywist\u0105 tras\u0105.<\/p>\n<p>Laravel daje <code>Storage<\/code>fasad\u0119, kt\u00f3ra s\u0142u\u017cy\u0142a do interakcji ze skonfigurowanymi dyskami. W naszym przypadku dysk to S3. Dodaj <code>Storage<\/code>fasad\u0119 w kontrolerze w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse IlluminateSupportFacadesStorage;\n...\n...<\/code><\/pre>\n<p>Po dodaniu fasady mo\u017cesz przesy\u0142a\u0107 pliki na S3. Napisz poni\u017cszy kod w swojej metodzie, kt\u00f3ra wysy\u0142a plik na S3.<\/p>\n<pre><code>&lt;?php\n...\n...\npublic function store(Request $request)\n{\n\u00a0\u00a0\u00a0\u00a0if($request-&gt;hasFile('profile_image')) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename with extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenamewithextension = $request-&gt;file('profile_image')-&gt;getClientOriginalName();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename without extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get file extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$extension = $request-&gt;file('profile_image')-&gt;getClientOriginalExtension();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/filename to store\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenametostore = $filename.'_'.time().'.'.$extension;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/Upload File to s3\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Storage::disk('s3')-&gt;put($filenametostore, fopen($request-&gt;file('profile_image'), 'r+'), 'public');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/Store $filenametostore in the database\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>W powy\u017cszym kodzie generuj\u0119 unikaln\u0105 nazw\u0119 pliku, a nast\u0119pnie przesy\u0142am go do S3. U\u017cytkownik powinien przechowywa\u0107 nazw\u0119 pliku w bazie danych do p\u00f3\u017aniejszego wykorzystania. Podczas wgrywania pliku do S3 przekaza\u0142em trzeci parametr jako 'public&#8217;. Je\u015bli nie chcesz ustawia\u0107 pliku jako 'public&#8217;, pomi\u0144 ten parametr.<\/p>\n<p>U\u017cytkownik mo\u017ce uzyska\u0107 adres URL przes\u0142anego pliku za pomoc\u0105 kodu:<\/p>\n<pre><code>$url = Storage::disk('s3')-&gt;url('YOUR_FILENAME_HERE');<\/code><\/pre>\n<p>Aby usun\u0105\u0107 plik z zasobnika S3, u\u017cyj metody usuwania, jak pokazano poni\u017cej.<\/p>\n<pre><code>Storage::disk('s3')-&gt;delete('YOUR_FILENAME_HERE');<\/code><\/pre>\n<p>Chodzi o to, jak przes\u0142a\u0107 plik do S3 za pomoc\u0105 systemu plik\u00f3w Laravel. Mam nadziej\u0119, \u017ce dowiedzia\u0142e\u015b si\u0119 o systemie dostarczonym przez Laravel do interakcji z Amazon S3. Podziel si\u0119 swoimi przemy\u015bleniami i sugestiami w sekcji komentarzy poni\u017cej.<\/p>\n<h3>Powi\u0105zane artyku\u0142y<\/h3>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-przesylac-i-kompresowac-obrazy-w-laravel\/\" title=\"Przewodnik po przesy\u0142aniu i kompresowaniu obraz\u00f3w w Laravel\">Przewodnik po przesy\u0142aniu i kompresowaniu obraz\u00f3w w Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-wykonac-kopie-zapasowa-aplikacji-laravel\/\" title=\"Jak wykona\u0107 kopi\u0119 zapasow\u0105 aplikacji Laravel\">Jak wykona\u0107 kopi\u0119 zapasow\u0105 aplikacji Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/kopia-zapasowa-aplikacji-laravel-na-dropbox\/\" title=\"Kopia zapasowa aplikacji Laravel na Dropbox\">Kopia zapasowa aplikacji Laravel na Dropbox<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chcesz wiedzie\u0107, jak wgra\u0107 plik do S3 w Laravelu? W tym artykule przedstawiamy przewodnik krok po kroku wyja\u015bniaj\u0105cy przesy\u0142anie pliku do Amazon S3<\/p>\n","protected":false},"author":1,"featured_media":21654,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[501],"tags":[847],"class_list":["post-28572","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28572","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=28572"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28572\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/21654"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=28572"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=28572"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=28572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}