Springboot如何实现论坛/博客类的图片上传/管理

好哥哥萌
最近自己在做一个web项目
涉及到了类似论坛,博客类的图片管理
用户或者博主可以上传图片,然后放到一个指定的目录下通过一个静态链接来返回资源

上传图片,指定静态资源,控制器的一些操作我都是会的。。
但是有一个问题就是这个部分怎么实现比较“规范
怎样实现与系统的耦合度比较低,并且方便迭代

像是论坛,博客之类的静态资源存储。不管是存储在本地,还是存储在云。都建议使用一个独立的域名来访问。

例如,springboot.io 论坛的图片资源,就建议用 image.springboot.io 来访问,并且入库存储。

这样有一些好处。对于以后图片资源的迁移,不用修改数据库中存储的资源访问路径。只需要修改 image.springboot.io的DNS解析即可。

如果使用本地存储

那么可以使用Nginx在同一个端口反向代理静态资源和APP应用程序,使用不同域名区分。

如果使用云存储

类似于阿里云OSS,云存储。都是可以绑定自己的域名。

规范代码?

我也不知道什么规范代码。你可以定义一个接口。对资源文件的CRUD方法进行抽象类似于:

public String upload(...);
public String delete(...);
public String copy(...);

然后提供N个实现,例如资源存储在本地的实现,存储在阿里云OSS的实现,存储在腾讯云的实现。通过系统在后台对这些实现进行维护。

如果系统很大,可以把上传功能单独的抽取出来。作为一个服务为进行维护。

以上就是个人拙见了。 :monkey_face:

1 Like

懂了,如果资源在云端或者本地静态资源的话用域名+路径就行了

那如果静态资源访问的控制器写在系统内,资源储存在本地的话(为了记录log或者控制权限等操作)
比如我的图像路径是/public/images/xx/xx/xxx.png
那我在控制器的部分怎么样写比较好?

是匹配/public/images/**路径后从资源文件夹内拿吗

没懂。

就是您的回答解决了上传和操作的各种问题

但是我这里还有一个获取图片的问题
怎么样去设计一个控制器来返回图片资源

静态资源的访问,不要经过应用程序的控制台。使用静态服务器(Nginx之类的)比较好。

除非是你需要限制用户对静态资源的访问。
通过系统控制,你可以通过request对象,获取倒 uri信息。通过uri,可以定位到本地的图片资源文件。在鉴权后,IO响应给客户端就是了。

是的是的!

这个部分只需要简单的设计和映射到本地文件夹就行了吧?
有没有什么特殊的设计规范

好像这玩意儿没啥规范。就是个简单的鉴权和文件IO。 :joy:。你可以考虑用阿里云的云存储,它有一个STS权限控制。你程序只负责鉴权,如果鉴权成功。就在OSS申请一个临时访问的Token。然后给客户端去访问就行了。不需要自己去IO文件。应用程序,不擅长IO这种静态资源。

好的!谢谢好哥哥了!