Итак, этот ответ состоит из двух частей.
Во-первых, storage
не является общедоступным по умолчанию. По документам :
Чтобы сделать их доступными из Интернета, вы должны создать символическую ссылку из public / storage в storage / app / public. Это соглашение будет хранить ваши общедоступные файлы в одном каталоге, который может быть легко распространен между развертываниями при использовании систем развертывания с нулевым временем простоя, таких как Envoyer.
(Возможно, вы сделали это локально один раз, но забыли. Или на локальном сервере заканчивается основная папка приложения вместо подпапки public
.)
НО ...
В Heroku файловая система эфемерна. Он не является постоянным. Файлы, которые вы храните в экземпляре, могут уйти в в любое время . Если вы выполните новое развертывание или увеличите / уменьшите масштаб. или если Heroku необходимо перезапустить / заменить экземпляр, все файлы, загруженные пользователями на storage
, уничтожены .
Вместо этого вы захотите хранить пользовательские загрузки где-нибудь, например, в Amazon S3, что упрощает Laravel. После того, как вы настроили свои ключи S3, вы можете просто сделать что-то вроде Storage::disk('s3')
для работы с S3 вместо локального диска, который скоро будет удален.