You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Laravel项目到AWS EC2时上传文件与图片的存储目录选择问题

Laravel 项目上传文件存储目录问题解答

当前存储方案的合理性判断

你当前直接将用户上传的文件和图片存放在public目录下的方案不推荐用于生产环境,主要存在3个核心问题:

  • 部署新版本时,如果你通过代码同步、Git拉取等方式覆盖public目录,很容易误删历史上传的用户文件
  • public是Web服务器直接暴露的根目录,若攻击者上传伪装成图片的恶意可执行脚本,直接访问路径即可触发脚本执行,存在严重安全隐患
  • 后续如果需要扩容、切换云存储方案(比如AWS S3),存储在public目录的文件适配成本极高,无法复用Laravel自带的文件系统抽象层能力

推荐的本地存储路径

Laravel官方默认推荐的用户上传文件本地存储目录为storage/app/public,优势如下:

  • 该目录默认不在Web服务器的公开访问范围内,即使有恶意文件上传,也无法直接通过HTTP请求执行,安全性更高
  • 该目录默认被加入.gitignore,部署拉取代码时不会被覆盖,历史上传文件可以永久保留
  • 适配Laravel文件系统抽象层,后续切换云存储只需要修改配置文件,不需要调整业务代码

适配修改步骤

你只需要做少量调整即可完成方案切换,原有asset()读取资源的逻辑几乎不用大改:

  1. 将当前存放在public目录下的上传文件、图片全部移动到storage/app/public的对应子目录中
  2. 在项目根目录执行命令php artisan storage:link,Laravel会自动在public目录下创建指向storage/app/public的软链接,相当于把存储目录映射到了Web可访问的路径下
  3. 原有调用asset()的代码只需要调整路径前缀即可,比如之前写asset('upload/1.jpg'),现在改成asset('storage/upload/1.jpg')就可以正常访问
  4. 部署到AWS EC2时,只需要在部署脚本中加入执行php artisan storage:link的步骤,同时确保部署流程不会覆盖storage/app/public目录的内容即可

内容的提问来源于stack exchange,提问作者Mohamed Yehia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:36:07