关于数据库应该如何储存用户头像 URL

大家在数据库储存用户头像或图片等文件URL的时候, 是存完整地址还是相对地址的, 例如 http://1.cn/pic/1.jpg 和 pic/1.jpg

现在有两个问题:

  1. 如果用 http://1.cn/pic/1.jpg 的方式储存的话, 如果遇到更换域名的情况, 那么之前的URL不是都要404了吗, 还有如果要删除文件的话, 显然也不能通过这个URL删除.
  2. 如果是 pic/1.jpg 方式, 再在model访问器里替换为完整的URL然后输出给前端, 但是有个不爽的地方就是我在其他model里有个需求就是去读取用户头像URL然后储存到这个其他model里的时候发现读取到的URL是经过访问器替换成了完整的URL, 而我期待的是相对URL(pic/1.jpg), 有没有什么方法可以绕过访问器吗?

除了这两种方式还有其它更优雅的方式没

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 19

$user->getOriginal('avatar')

其实,,你的编辑器有提示的话,你可以输入 $user->get 看看会出现哪些方法,,,一般都能找到自己想要的那个,,,如果真的有的话,,,

4年前 评论
Epona

一般采用的是第一种,少了很多问题。就算要更换域名,批量把数据库字段更新一下就好了。

4年前 评论

我觉得存相对路径更合适,如果图片和服务器是同域名 给前端返回相对路径就可以了,后期迁移到oss之类的也很方便。

4年前 评论
直面苦痛的人生 4年前

支持存相对路径

4年前 评论

相对路径+注解自动补全

4年前 评论

$this->attributes['image']

4年前 评论

@largezhou 非常感谢, 完全解决了我的疑问. 不过我的编辑器确实是没有补全提示, phpstorm , 求推荐一款能够完美支持 laravel 补全提示的编辑器

file

4年前 评论

@Pariswer

这个确实不会提示,,,因为 ::find 是通过魔术方法调用的,,

  • 装 ide-helper 扩展包
  • 给 $user 变量加注释
  • 背 api [滑稽]
4年前 评论
农村闲散劳动力

第一种, 因为第二种有坑
问题:HTTP 协议中的并发限制及队首阻塞问题
为了解决这个问题, 只能用第一种.

我一般存储图片使用的是: http://img(随机数字).img.com/图片地址
可以去console一下淘宝和狗东 我是借鉴它们的

相关文章
https://juejin.im/post/5b8909036fb9a01a0b3...

4年前 评论
陈伯乐 4年前

@largezhou 装了 ide-helper 扩展包, 也重启了IDE, 但还是提示 Method 'getOriginal' not found. 以前也装过这个扩展, 好像也是因为这个原因后来卸载了

4年前 评论

@Pariswer

我刚才把 ide-helper 的相关文件都删了,也是可以提示的

Laravel

只是 find 方法那里会提示,非静态方法,不应该静态调用,不过还是可以跳转的,,,

4年前 评论
h-o-o (楼主) 4年前
largezhou (作者) 4年前
largezhou (作者) 4年前
h-o-o (楼主) 4年前

@largezhou 应该是你在 AdminUser model 里添加了 @method tag 注释了吧. 你跳转过去看看

4年前 评论
largezhou 4年前

@largezhou 这IDE遇到遇到 laravel 秒变记事本

4年前 评论

AdminUser::query()->get();这样可以自动补齐代码,加一个query()

4年前 评论

存相对路径,然后用 Storage 来返回完整路径,可以无缝切换到 OSS 存储

4年前 评论
h-o-o (楼主) 4年前
陈伯乐 (作者) 4年前

第二种,在配置里添加文件服务器,加上数据库读取出来的绝对地址,当文件服务器改域名的时候,直接改配置。另外,建议能少放进数据库的就少放

4年前 评论

第二种,不建议第一种。第一种修改域名太麻烦了,第二种存一个相对地址,写一个方法换取一个完整的地址即可。

4年前 评论

@linzening 我赞同第二种,域名放配置文件,后面哪怕是修改,也就是改配置的事;

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!