目录
  1. 1. 获取URL
Go版本图床-根据虚拟url获取真实的url

文章首发于:clawhub.club


因为每张图片上传后,都会分发到不同的图床中,库中也就存储了多张真实的url和一张虚拟的url。用户拿到虚拟URL后,访问浏览器,之后系统重定向到真实的url。

这里有个问题:免费的图床,不稳定,URL会失效。如何实时的更新图床url是个问题。

目前想到两个方案:

1,周期性扫描并请求所有url,发现失效的url之后,获取到其有效的图片后,重新上传到当前图床,更新此url。这样做的优点就是,对用户友好,拿到的永远是生效的URL,如果虽然也会有一些时间差,在这之间和、可能会有失效的URL。

2,因为这是个API应用,所以,用户每次都拿一份真实的url,如果失效了,点击刷新,重新获取另一个URL,如果还是失败的,那就再刷新,因该不会有太多的不靠谱url吧。即后端要留一个刷新的口子,根据用户发来的虚拟URL和失效URL,首先返回另一个真实URL,再异步更新这个图床的图片数据。这一方案的优点就是能减少系统的资源,缺点就是用户要刷新图片,可能不友好。

天下没有免费的午餐,既然吃着这个,那就得忍受他的缺点。
还有就是这种免费的图床,因为上传到被人的库里面,你是不知道他吗、拿你的数据会做什么,所以不能上传不好的,隐私的,重要的东西。

我当前选择的是方案二,反正是自己用着玩,节省资源最重要。

获取URL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//获取图片
func GetImage(c *gin.Context) {
mainUrl := c.Param("mainUrl")
url := service.Download(mainUrl, "guest")
if url != "" {
c.Redirect(http.StatusMovedPermanently, url)
}
c.String(http.StatusNotFound, "image not found")
}
//下载
func Download(mainUrl, email string) (url string) {
fb, err := dao.QueryOne(mainUrl, email)
if err != nil {
return ""
}
return fb.Url
}

刷新的逻辑还没写完,反正目前不需要,等用的时候再搞。

文章作者: ClawHub
文章链接: https://www.clawhub.club/posts/2019/08/11/Golang/Go%E7%89%88%E6%9C%AC%E5%9B%BE%E5%BA%8A-%E6%A0%B9%E6%8D%AE%E8%99%9A%E6%8B%9Furl%E8%8E%B7%E5%8F%96%E7%9C%9F%E5%AE%9E%E7%9A%84url/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的博客
打赏
  • 微信
  • 支付宝
扫一扫关注ClawHub公众号,专注Java、技术分享、面试资源。

评论