我使用 Heroku 在 Laravel 8 中部署了一個專案,它作業正常,但一段時間后,影像消失了,并且我存盤它們的檔案沒有顯示:

并讓我再次上傳它們,從昨天起這個問題發生了多次,這就是我用來存盤影像的代碼:
if($request->hasFile('img')){
$user_img = $request->file('img');
$name_gen = hexdec(uniqid()); //tobeSkiped
$image_ext = strtolower($user_img->getClientOriginalExtension());
$image_name = $name_gen . '.' . $image_ext;
$up_location = 'assets/image/utilisateurs/';
$last_img = $up_location . $image_name ;
$user_img->move($up_location,$image_name);
$user->img = $last_img;
}
if($request->hasFile('cache')){
$user_cache = $request->file('cache');
$name_gen = hexdec(uniqid()); //tobeSkiped
$image_ext = strtolower($user_cache->getClientOriginalExtension());
$cache_name = $name_gen . '.' . $image_ext;
$up_location = 'assets/image/cache/';
$last_cache = $up_location . $cache_name;
$user_cache->move($up_location,$cache_name);
$user->cache = $last_cache;
}
if($request->hasFile('logo')){
$user_logo = $request->file('logo');
$name_gen = hexdec(uniqid()); //tobeSkiped
$image_ext = strtolower($user_logo->getClientOriginalExtension());
$logo_name = $name_gen . '.' . $image_ext;
$up_location = 'assets/image/logo/';
$last_logo = $up_location . $logo_name;
$user_logo->move($up_location,$logo_name);
$user->logo = $last_logo;
}
我試過的:
- 在 vars 中寫入整個檔案路徑
- 檢查該檔案是否存在于專案的部署版本中(確實存在):

uj5u.com熱心網友回復:
這是 Heroku 上托管的應用程式的預期行為。從heroku 幫助中心:
Heroku 檔案系統是短暫的——這意味著在 dyno 運行時對檔案系統的任何更改只會持續到該 dyno 關閉或重新啟動。每個 dyno 都使用最新部署的檔案系統的干凈副本啟動。
這基本上意味著每當您的 Dyno 重新啟動時(至少每天一次),由于檔案系統被重置為應用程式部署時的狀態,所有影像都會被洗掉。Heroku 不適合持久化資料存盤。
您應該使用外部服務,例如Amazon S3或Heroku 提供的插件。
uj5u.com熱心網友回復:
Heroku 僅在您的程式需要運行時分配磁盤。如果它空閑,磁盤將被釋放并分配給其他人。因此,除非檔案是您代碼的一部分(靜態檔案),否則它們會消失。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/401269.html
