V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
582033
V2EX  ›  问与答

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

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

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

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

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

    内容存放肯定是这样的,如果图片是相对路径,那怎么存?
    hging
        8
    hging  
       2014-07-15 15:29:13 +08:00
    @582033 看是用什么语言和思路来写了。 可以参考6L的写法咯。
    582033
        9
    582033  
    OP
       2014-07-15 15:29:52 +08:00
    @shiny 这的确是个方法,谢谢.看看还有没有其他更好的方案.
    582033
        10
    582033  
    OP
       2014-07-15 15:30:58 +08:00
    @hging
    @wangdaimishu
    谢谢, 标签的形式也不错,有点类似聊天表情的做法。
    learnshare
        11
    learnshare  
       2014-07-15 15:33:42 +08:00
    只存相对路径,域名单独做变量。
    abelyao
        12
    abelyao  
       2014-07-15 15:38:03 +08:00
    @582033 绑定域名,最简单了,换服务而无需换域名。
    如果换域名的话,批量替换绝对是成本最低的方法了,而且最直接,最有效,用什么占位符的,都是在给服务器增加无谓的负担,考虑到访问量、和不同地方输出内容的时候都需要去替换占位符,简直就…
    582033
        13
    582033  
    OP
       2014-07-15 15:39:10 +08:00
    @abelyao 是啊,域名这个方案是成本最低的了
    wangdaimishu
        14
    wangdaimishu  
       2014-07-15 15:43:45 +08:00
    @abelyao 如果你的内容只用在web上当然没问题,但是哪天老板想顺应移动大潮了怎么办?占位符的好处就显示出来了,我可以web用一份图片,app用另一份,简单灵活。。。。
    abelyao
        15
    abelyao  
       2014-07-15 15:47:27 +08:00
    @wangdaimishu 看我在一楼的回复。
    另外,如果考虑移动端,域名占位符也解决不了这个问题,而应该使用图片样式,来显示同一张图的不同尺寸版本,如果显示的是同一个尺寸版本,那就没必要想那么远了。
    abelyao
        16
    abelyao  
       2014-07-15 15:48:14 +08:00
    @wangdaimishu 像 upyun 和 qiniu 都有提供“图片样式”或者叫“缩略图版本”的功能
    582033
        17
    582033  
    OP
       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
        18
    582033  
    OP
       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
        19
    sobigfish  
       2014-07-15 16:45:41 +08:00
    host 和 uri分开啊
    Lax
        20
    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,改数据库或配置文件即可生效。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2787 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:43 · PVG 17:43 · LAX 01:43 · JFK 04:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.