为了方便网站以后更换图片服务器的 iP 或者域名,让文章内的图片也跟着切换,怎么存放地址比较好?

2014-07-15 15:01:54 +08:00
 582033
比如使用第三方的图片服务,比如从又拍云切换到七牛,文章里的图片地址怎么存放比较好?
5141 次点击
所在节点    问与答
20 条回复
abelyao
2014-07-15 15:05:23 +08:00
更换之后一句 SQL 批量替换一下。
要么就存放相对路径,每次输出到页面之前都处理一下。
如果是商品类网站我倾向下面的,文章中的插图我倾向上面的方法。
imn1
2014-07-15 15:11:10 +08:00
script redir
582033
2014-07-15 15:13:05 +08:00
@abelyao 我记得知乎之前使用upyun的,它是怎么在upyun qiniu zhiimg三个图片服务间切换的呢?总觉得替换的方式很搓
shiny
2014-07-15 15:14:25 +08:00
你的域名有没有备案…… 备案过的域名可以设置为自己的域名,就可以无缝切换。
hging
2014-07-15 15:15:28 +08:00
建议把图片的域名或者IP写一个变量,然后数据库中存相对路径。这样只需要改一个配置文件就好了。
wangdaimishu
2014-07-15 15:19:09 +08:00
存内容的时候把图片替换成一个标签,比如 [img=2014/07/123.jpg],然后在前台显示的时候把内如读出来,用正则将img标签换成html标签就行了,这样以后换域名就非常简单。

最重要的是你所有的图片src地址都要用一个函数来生成,比如可以写一个 getImageUrl('2014/07/123.jpg'); 输出的是 http://ooxx.com/image/2014/07/123.jpg 类似这样的内容。

一旦你这样处理了,将来图片换服务器什么的就简单了,直接改getImageUrl()就好了,或者直接就在配置文件里定义好。
582033
2014-07-15 15:25:52 +08:00
@hging 简单举个数据库存放图片的例子

这是示例内容这是示例内容<img src="http://foo.com/bar.png">
这是示例内容这是示例内容

内容存放肯定是这样的,如果图片是相对路径,那怎么存?
hging
2014-07-15 15:29:13 +08:00
@582033 看是用什么语言和思路来写了。 可以参考6L的写法咯。
582033
2014-07-15 15:29:52 +08:00
@shiny 这的确是个方法,谢谢.看看还有没有其他更好的方案.
582033
2014-07-15 15:30:58 +08:00
@hging
@wangdaimishu
谢谢, 标签的形式也不错,有点类似聊天表情的做法。
learnshare
2014-07-15 15:33:42 +08:00
只存相对路径,域名单独做变量。
abelyao
2014-07-15 15:38:03 +08:00
@582033 绑定域名,最简单了,换服务而无需换域名。
如果换域名的话,批量替换绝对是成本最低的方法了,而且最直接,最有效,用什么占位符的,都是在给服务器增加无谓的负担,考虑到访问量、和不同地方输出内容的时候都需要去替换占位符,简直就…
582033
2014-07-15 15:39:10 +08:00
@abelyao 是啊,域名这个方案是成本最低的了
wangdaimishu
2014-07-15 15:43:45 +08:00
@abelyao 如果你的内容只用在web上当然没问题,但是哪天老板想顺应移动大潮了怎么办?占位符的好处就显示出来了,我可以web用一份图片,app用另一份,简单灵活。。。。
abelyao
2014-07-15 15:47:27 +08:00
@wangdaimishu 看我在一楼的回复。
另外,如果考虑移动端,域名占位符也解决不了这个问题,而应该使用图片样式,来显示同一张图的不同尺寸版本,如果显示的是同一个尺寸版本,那就没必要想那么远了。
abelyao
2014-07-15 15:48:14 +08:00
@wangdaimishu 像 upyun 和 qiniu 都有提供“图片样式”或者叫“缩略图版本”的功能
582033
2014-07-15 16:42:39 +08:00
@abelyao 自己写了个nginx url_rewrite来实现图片样式,附上

location ~ .*\.(jpg|png|gif)?(!\w+|\s|!\d+)$ {
rewrite ^/(tmp\/.*)/(\d+).(jpg|png|gif)!(\d+|\w+)$ /$1/$4_$2.$3;
if ( !-f $request_filename ) {
rewrite ^/(tmp\/.*)/(.*).(jpg|png|gif)$ /upload/create/$1/$2.$3 redirect;
}
expires 30d;
}

例如原图地址是:http://foo.com/bar.jpg
582033
2014-07-15 16:44:05 +08:00
@abelyao 自己写了个nginx url_rewrite来实现图片样式,附上

location ~ .*\.(jpg|png|gif)?(!\w+|\s|!\d+)$ {
rewrite ^/(tmp\/.*)/(\d+).(jpg|png|gif)!(\d+|\w+)$ /$1/$4_$2.$3;
if ( !-f $request_filename ) {
rewrite ^/(tmp\/.*)/(.*).(jpg|png|gif)$ /upload/create/$1/$2.$3 redirect;
}
expires 30d;
}

例如原图地址是:http://foo.com/bar.jpg

60x60的就是 http://foo.com/bar.jpg!60

80x80的就是 http://foo.com/bar.jpg!80

如果没有120x120这个尺寸,访问的时候会请求后端php生成
sobigfish
2014-07-15 16:45:41 +08:00
host 和 uri分开啊
Lax
2014-07-15 18:03:14 +08:00
之前做过的一个方案:

分10个目录dir[0-9],文件随机平均放进去。文件名形式为/dir[0-9]/path/to/file.jpg,数据库保存这个文件名。

另有一个对应关系表(存数据库或配置文件或memcache等):dir0-> img0.xxx.com, dir1-> img1.xxx.com, ...

想换域名时,只需要更改对应关系,比如dir0 -> up.img0.xxx.com, dir1 -> qiniu.img1.xxx.com,改数据库或配置文件即可生效。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/122734

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX