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

上传图片的逻辑,大家有什么方法的吗?

  •  
  •   mywaiting · 2014-08-31 20:59:14 +08:00 · 4365 次点击
    这是一个创建于 3736 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本来很简单的事情,可能是我想复杂了,问问大家有什么方法无~

    就是一个Blog吧,需要实现上传图片的功能,那就直接upload image上去服务器,将upload的图片路径等的信息插入到database,然后服务器返回图片的路径等数据就好了,然后我有以下问题:

    1、作者写着blog,上传了图片,但是又不想写了,blog也没有保存,那插入数据库的image的信息怎么办?

    2、作者写完了blog,但是上传了很多blog无关的图片,blog里面也没有引用到这些图片,那插入到数据库的image的信息怎么办?

    3、那些blog引用不到的图片放在upload的文件也占用磁盘空间,怎么办?

    有同学写过相关的完整的图片上传逻辑的实现吗?Google了一遍好像都没有感觉。

    求上面的问题处理方法、逻辑。

    谢谢!
    9 条回复    2014-09-01 12:21:14 +08:00
    goace
        1
    goace  
       2014-08-31 21:24:52 +08:00   ❤️ 1
    首先如果只是小站的话,图片不会占你多少空间,没必要纠结这个问题。

    实在在意这个事情的,可以个每个图片加个引用计数,首次上传计数为0,文章被Post的时候,文章里的所有图片引用加1;服务端周期性地清理计数为0的图片。
    breakwa11
        2
    breakwa11  
       2014-08-31 21:25:06 +08:00   ❤️ 1
    加一个引用字段,编辑时加上对图片的引用的时候更新引用,便能跟踪到无引用的图片
    mywaiting
        3
    mywaiting  
    OP
       2014-08-31 21:50:22 +08:00
    @goace
    @breakwa11

    也不分站点大小吧,处女座的洁癖,你懂的。

    提供的思路甚好!已点感谢!
    whywhywhy
        4
    whywhywhy  
       2014-08-31 23:49:54 +08:00
    丢别人图床上 浪费别人的空间 再也不用考虑什么数据库啊 什么备份啊 什么乱七八糟的了 当然啦 选择一个靠谱的图床是件很有意思的事情
    Mutoo
        5
    Mutoo  
       2014-09-01 00:02:54 +08:00
    可以参考wordpress做法,媒体库与文章是独立的两个功能。

    图片先上传到媒体库,再在文章中引用。这样分开管理,即使你上传了图片,文章不发布,也可以在媒体库中管理,事后删除。
    akfish
        6
    akfish  
       2014-09-01 06:25:25 +08:00 via iPad   ❤️ 1
    从用户体验的角度来讲,这种需要占用用户时间和资源上传的东西,不要随意丢弃。想像一下你忍者龟速上传了一个几M的gif,然后抽风了文章没保存,于是又要重新上传是多么蛋疼的事情。
    要考虑存储空间占用的问题,要先思考图片是什么。一个图片资源其实产生了两个实体:物理文件和元数据。物理文件很好理解,元数据则是用户给图片附加的属性。
    对物理文件做hash,hash当作文件名存储,用户的重复文件不会占用多余的存储空间。元数据才用数据库管理,不同用户的不同元数据可能指向同一个物理文件。这部分逻辑可以对用户隐藏,也可以通过类似媒体库的概念暴露给用户。
    真正量大到要操心空间占用了,就像楼上说的,引用计数,超时未用的图片删了就是了。
    mywaiting
        7
    mywaiting  
    OP
       2014-09-01 09:00:16 +08:00
    @whywhywhy 丢别人的图床还是担心服务不靠谱吧,我们虽然能随时翻到imgur看图,但用户不一定。微博的确是个好图床。

    @Mutoo 图片的上传肯定是分开管理的,做成媒体库这样也未尝不可,就是想完善一下这个程序的逻辑吧。


    @akfish 嗯嗯,亲的hash的做法昨晚洗澡的时候想到了,手动点感谢一个。
    582033
        8
    582033  
       2014-09-01 09:50:12 +08:00
    @whywhywhy 我喜欢你的思路
    omi4399
        9
    omi4399  
       2014-09-01 12:21:14 +08:00 via iPhone
    我都丢七牛上了,是不是去清理一下就好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2651 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:04 · PVG 19:04 · LAX 03:04 · JFK 06:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.