图片不显示、上传失败与存储问题

分类:常见问题 · 更新于 2026-11-05 · 约 1275 字

上传报错、图片破图、海报图不显示与附件占满磁盘的排查,含本地与云存储两类配置。

一、先分清是上传失败还是显示失败

上传失败通常在提交时直接报错或一直转圈;显示失败则是文件已存在、页面上却是破图。先到后台附件管理看是否已生成这条记录:没有记录说明上传没成功,有记录但前台不显示,问题就在读取与存储环节。

二、上传失败排查

  1. 目录权限:upload/ 必须存在且 PHP-FPM 用户(www)可写,属主与权限参见「目录权限与写入失败」一篇。
  2. PHP 限制:图片超过 upload_max_filesize 或 post_max_size 会被拒收,调大后重载 PHP-FPM。
  3. 扩展缺失:缩略图、水印依赖 gd,类型识别依赖 fileinfo,缺哪个补哪个。
  4. 临时目录:upload_tmp_dir 不可写时上传会中断,指向站点可写目录即可。
ls -ld /www/wwwroot/你的域名/upload
php -i | grep -E 'upload_max_filesize|post_max_size|upload_tmp_dir'
tail -n 50 /www/server/php/82/var/log/php-fpm.log

三、图片不显示

  • 本地存储:检查文件是否真实存在、URL 是否带了正确域名。站点迁移后,旧记录里的绝对地址可能仍指向老域名。
  • 云存储:后台「上传设置」把存储方式切到阿里云或腾讯云后,需把 AccessKey、存储桶名与地域结点填对。阿里云 OSS 的 Bucket 读权限设为「公共读」;腾讯云存储桶权限设为「公有读私有写」。任一项填错,图片都会链不上。

四、海报中图片不显示(跨域)

海报是把图片绘制到画布上再导出的,云存储若未放行跨域请求,画布读取图片会被浏览器拦截,海报里就留白。到云存储的跨域设置中新建规则:来源填 * 或你的域名,允许 Methods 勾选 GET,并勾选返回 vary:origin,保存后海报中的图片即可正常显示。

五、水印的配置顺序

水印图片本身也要存放在云存储中。正确顺序是先把云存储接口配置好并测试通过,再重新上传一次水印图片,之后再开才不出错。

六、附件与磁盘清理

运营久了会出现大量无用图片:用户传了却没发布,或信息已删除图片却留着。在后台「附件管理」中可按状态处理:

附件状态含义处理
正常仍被信息或商家引用保留
等待已上传但未发布,超时后转为过期观察
过期已无人引用可删除

筛选“过期”后全选执行删除;若文件此前已在服务器上手工删掉,选「不包括文件」只删记录,避免报错。「删除过期附件」还能按日期批量清理。若附件记录数少于服务器上的实际文件数,先执行检测再导入附件,把无记录的文件纳管,然后筛选、检测、清理,才不会误删还在用的图片。

du -sh /www/wwwroot/你的域名/upload
find /www/wwwroot/你的域名/upload -type f | wc -l
提示:真正释放空间的是文件而不是记录,清理后用上面的命令核对目录体积是否下降。

相关教程

文档对不上实际界面?可在常见问题中查找排查步骤,或按「安装部署」中的环境要求核对版本。