當上傳圖片時,我意識到首先我可以使用store方法,它默認將圖片保存在storage/app/public中,然后我必須從public/storage到storage/app/public創建一個符號鏈接以訪問圖片。
第二,我仍然可以使用move method并讓圖片直接保存在public/images中。
我覺得第一種方式無緣無故地長了一些,是否有一些場景需要使用一個而不是另一個,或者這只是一個偏好的問題?
uj5u.com熱心網友回復:
從laravel檔案https://laravel.com/docs/5.4/filesystem:
move方法可用于重命名或移動現有的檔案到一個新的位置
Laravel非常容易使用
。store方法來存盤上傳的檔案,在上傳的檔案實體上使用
因此, 當你在處理一個已經上傳的檔案時,使用storeAs()或store()(即在一個控制器內), 而move()只在你已經有一個檔案在磁盤中,將它從一個位置移動到另一個位置時使用。
uj5u.com熱心網友回復:
是的,在某些情況下它更好,但它可能與你無關,讓我解釋一下。
storage檔案夾通常被認為是一個 "共享 "檔案夾。我想說的是,當你部署你的應用程式時,它的內容通常不應改變,而且它的大部分內容在 git 中甚至被忽略(以防止你的上傳最終出現在 git 倉庫中)。
因此,在這種情況下,將您的上傳內容存盤在storage/app/public目錄中,意味著這些內容不在git中,并且storage檔案夾可以在部署之間共享。
當您使用Envoyer、Envoy或其他 "零停機時間 "部署工具時,這一點很有用。
大多數(如果不是全部)零停機部署工具的作業方式是將您的應用程式克隆到一個新的目錄,并在將該新目錄推廣到您的 Web 服務器用于服務您的應用程式的 current 目錄之前,運行 composer install 和其他設定命令。將一個符號鏈接切換到一個新的目錄是即時的,因此你的部署是零停機的,因為所有的設定(安裝依賴性等)都是在一個還沒有為用戶提供流量的檔案夾中完成。
而且,由于每次部署都是從你的版本庫的全新克隆開始的,這也意味著你的public和storage檔案夾再次變空...這不是你想要的,因為你當然想在部署之間保留上傳。解決這個問題的方法是,這些部署工具將把storage檔案夾存盤在另一個檔案夾中,并且每次部署都會克隆你的git repo,并將storage檔案夾symlinks到那個共享的storage檔案夾,因此你的所有部署都共享同一個storage目錄,確保上傳(但根據你使用的驅動程式,還有會話、快取和日志)對每次部署都是一樣的。
然后您可以使用 php artisan link 將 storage/app/public 符號鏈接到 public/storage,以便這些檔案可以被公開訪問。
(注意:有了這個符號鏈接,你寫到哪個路徑并不重要,storage/app/public或者public/storage,因為它們指向磁盤上的同一個檔案夾)。
因此,這種看似過于復雜的符號鏈接舞是為了使部署更容易,并使您的所有 "存盤 "在一個地方,即storage目錄中。
但是當你不使用那些零停機時間的部署工具時,這一切似乎都是無稽之談。但是,即使在那里,有一個單一的地方,你的所有應用程式的存盤都在那里進行備份,而不是不得不備份多個目錄,這可能仍然是有用的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/310450.html
標籤:
上一篇:安卓11存盤訪問和Java檔案庫
