{"id":27193,"date":"2021-05-05T15:22:00","date_gmt":"2021-05-05T12:22:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=27193"},"modified":"2021-10-18T03:49:53","modified_gmt":"2021-10-18T00:49:53","slug":"jak-przeslac-obrazy-na-inny-serwer-przez-ftp-w-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/jak-przeslac-obrazy-na-inny-serwer-przez-ftp-w-laravel\/","title":{"rendered":"Jak przes\u0142a\u0107 obrazy na inny serwer przez FTP w Laravel?"},"content":{"rendered":"<p>Czy chcesz przes\u0142a\u0107 pliki z aplikacji Laravel na inny serwer przez FTP? Laravel ma wbudowan\u0105 obs\u0142ug\u0119 przesy\u0142ania plik\u00f3w na zewn\u0119trzny serwer lub chmur\u0119. W tym przewodniku pokazujemy, jak przesy\u0142a\u0107 pliki (obrazy) na inny serwer przez FTP w witrynie Laravel.<\/p>\n<p>Umieszczenie obraz\u00f3w na innym serwerze mo\u017ce pom\u00f3c w zwi\u0119kszeniu szybko\u015bci witryny. Ta technika to rodzaj r\u00f3wnoleg\u0142ego po\u0142\u0105czenia mi\u0119dzy przegl\u0105dark\u0105 internetow\u0105 a serwerami. Zmniejsza obci\u0105\u017cenie z jednego serwera, poniewa\u017c w przypadku obraz\u00f3w przegl\u0105darka b\u0119dzie dzwoni\u0107 do innego serwera.<\/p>\n<p><a href=\"https:\/\/laravel.com\/docs\/5.6\/filesystem\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Filesystem<\/a> zapewnia wygodny spos\u00f3b zarz\u0105dzania naszymi plikami w chmurze lub serwerze zewn\u0119trznym. U\u017cytkownik mo\u017ce wybra\u0107 r\u00f3\u017cnych dostawc\u00f3w pami\u0119ci masowej Laravel, takich jak S3, Rackspace, FTP lub SFTP. Przyjrzyjmy si\u0119 przesy\u0142aniu plik\u00f3w Laravel za pomoc\u0105 sterownika FTP.<\/p>\n<h3>Prze\u015blij pliki na inny serwer za pomoc\u0105 sterownika FTP<\/h3>\n<p>Aby rozpocz\u0105\u0107, powiniene\u015b zna\u0107 dane swojego hosta FTP, nazw\u0119 u\u017cytkownika FTP i has\u0142o FTP. Gdy jeste\u015b gotowy ze szczeg\u00f3\u0142ami, otw\u00f3rz <code>.env<\/code>pliki i dodaj szczeg\u00f3\u0142y, jak poni\u017cej:<\/p>\n<pre><code>FTP_HOST=YOUR_FTP_HOST_VALUE\nFTP_USERNAME=YOUR_FTP_USERNAME_VALUE\nFTP_PASSWORD=YOUR_FTP_PASSWORD_VALUE<\/code><\/pre>\n<p>Pami\u0119taj, aby zast\u0105pi\u0107 symbole zast\u0119pcze rzeczywistymi warto\u015bciami. Nast\u0119pnie otw\u00f3rz <code>config\/filesystems.php<\/code>plik i dodaj konfiguracj\u0119 'ftp&#8217; do tablicy 'disk&#8217;.<\/p>\n<p><strong>config\/filesystems.php<\/strong><\/p>\n<pre><code>&lt;?php\nreturn [\n\u00a0\u00a0\u00a0\u00a0......\n\u00a0\u00a0\u00a0\u00a0'disks' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0......\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'ftp' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'driver' =&gt; 'ftp',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'host' =&gt; env('FTP_HOST'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'username' =&gt; env('FTP_USERNAME'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'password' =&gt; env('FTP_PASSWORD'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'root' =&gt; 'DIR_PATH_TO_WHERE_IMAGE_STORE' \/\/ for example: \/var\/www\/html\/dev\/images\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\n];<\/code><\/pre>\n<p>Zast\u0105p DIR_PATH_TO_WHERE_IMAGE_STORE rzeczywist\u0105 \u015bcie\u017ck\u0105, w kt\u00f3rej chcesz przechowywa\u0107 obrazy. Na przyk\u0142ad, je\u015bli mamy folder o nazwie \u201eimages&quot;, a \u015bcie\u017cka do tego folderu to \/var\/www\/html\/dev\/images, to ta \u015bcie\u017cka b\u0119dzie traktowana jako warto\u015b\u0107 \u201eroot&#8221; w powy\u017cszej tablicy.<\/p>\n<p>Do przesy\u0142ania plik\u00f3w przez FTP potrzebujemy formularza, w kt\u00f3rym u\u017cytkownik mo\u017ce przes\u0142a\u0107 obraz. Dodaj poni\u017cszy kod do pliku widoku.<\/p>\n<pre><code>&lt;form action=\"{{ url('PASS_ACTION_URL_HERE') }}\" 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\" multiple \/&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>Nale\u017cy zast\u0105pi\u0107 PASS_ACTION_URL_HERE rzeczywist\u0105 tras\u0105. Poniewa\u017c u\u017cywamy Laravel Storage do wgrywania plik\u00f3w, u\u017cytkownik musi doda\u0107 Fasada do pliku kontrolera w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<pre><code>use IlluminateSupportFacadesStorage;<\/code><\/pre>\n<p>Wreszcie kod funkcji kontrolera b\u0119dzie taki, jak poni\u017cej:<\/p>\n<pre><code>public function store(Request $request)\n{\n\u00a0\u00a0\u00a0\u00a0if($request-&gt;hasFile('profile_image')) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\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.'_'.uniqid().'.'.$extension;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/Upload File to external server\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Storage::disk('ftp')-&gt;put($filenametostore, fopen($request-&gt;file('profile_image'), 'r+'));\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/Store $filenametostore in the database\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0return redirect('images')-&gt;with('status', \"Image uploaded successfully.\");\n}<\/code><\/pre>\n<p>&#8217;profile_image&#8217; to nazwa naszego pliku wej\u015bciowego. Budujemy unikaln\u0105 nazw\u0119 naszego pliku, a nast\u0119pnie przesy\u0142amy go na zewn\u0119trzny serwer. Zauwa\u017c, \u017ce u\u017cyli\u015bmy metody Storage::disk(&#8217;ftp&#8217;). Ta funkcja przechowa\u0142aby nasz plik w \u015bcie\u017cce zdefiniowanej w konfiguracji. U\u017cytkownik powinien przechowywa\u0107 warto\u015b\u0107 \u201e$filenametostore&#8221; w Twojej bazie danych.<\/p>\n<h3>Pobierz lub usu\u0144 obraz<\/h3>\n<p>Mamy do czynienia z obrazami, wi\u0119c oczywi\u015bcie musimy je wy\u015bwietli\u0107 na stronie. Poniewa\u017c przechowujemy te obrazy na znanym serwerze zewn\u0119trznym, u\u017cytkownik powinien zna\u0107 \u015bcie\u017ck\u0119 HTTP do folderu, w kt\u00f3rym przechowujemy obrazy. Mo\u017ce to by\u0107 adres TWOJA_DOMAIN_URL\/obrazy\/. W metodzie kontrolera powinni\u015bmy przechowywa\u0107 nazw\u0119 obrazu w bazie danych. Tak wi\u0119c nasz tag HTML img b\u0119dzie wygl\u0105da\u0142 nast\u0119puj\u0105co:<\/p>\n<pre><code>&lt;img src=\"YOUR_DOMAIN_URL\/images\/FILE_NAME\" \/&gt;<\/code><\/pre>\n<p>Tutaj FILE_NAME to nazwa Twojego obrazu przechowywana w bazie danych. U\u017cytkownik mo\u017ce usun\u0105\u0107 plik w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<pre><code>Storage::disk('ftp')-&gt;delete('FILE_NAME');<\/code><\/pre>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-przeslac-plik-do-s3-za-pomoca-systemu-plikow-laravel\/\" title=\"Jak przes\u0142a\u0107 plik do S3 za pomoc\u0105 systemu plik\u00f3w Laravel?\">Jak przes\u0142a\u0107 plik do S3 za pomoc\u0105 systemu plik\u00f3w Laravel?<\/a><\/li>\n<li><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><\/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>W tym artykule dowiemy si\u0119, jak przes\u0142a\u0107 obraz na inny serwer przez FTP w Laravelu. Hostowanie obraz\u00f3w na serwerze zewn\u0119trznym mo\u017ce zmniejszy\u0107 przepustowo\u015b\u0107 serwera i pom\u00f3c w zwi\u0119kszeniu szybko\u015bci witryny.<\/p>\n","protected":false},"author":1,"featured_media":21643,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[501],"tags":[847],"class_list":["post-27193","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\/27193","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=27193"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/27193\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/21643"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=27193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=27193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=27193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}