V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cc7756789
V2EX  ›  程序员

Web 前后端文件交互的问题

  •  
  •   cc7756789 · 2015-10-27 10:34:25 +08:00 · 2479 次点击
    这是一个创建于 3319 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我看大多数网站, 上传文件, 都会有刷新状态, 这是不是说明文件在信息发布之前就已经上传到后端了?
    那么如果不和普通的表单数据一起传给同一个后端路由存储的话, 单独的文件数据用什么变量记录文件名, 再和未上传的信息关联呢? 这时候如果表单数据和文件没有同时处理, HTTP 连接可能已经结束了. 变量什么的也销毁了.

    • 如果先保存数据到数据库, 再上传文件, 显得有些不人性化 !
    • 先保存了文件, 如果放弃信息发布, 那么从哪里找文件名去删除呢 ?
    • 难道只有保存部分未完成数据在后端的方法? 下次用户新建信息时把数据传递给他? 好像十分麻烦, 还要考虑用缓存或者设计单独的数据库保存这种未完成的数据 !
    6 条回复    2015-10-27 11:57:29 +08:00
    adexbn
        1
    adexbn  
       2015-10-27 10:43:06 +08:00 via iPhone
    其实你可以前端生成文件名
    refresh
        2
    refresh  
       2015-10-27 10:44:14 +08:00   ❤️ 1
    1. 文件保存到一个临时目录,上传后给客户端返回文件名(uuid)
    2. 如果用户发布贴子,后台得到此文件名,复制此文件到正式目录
    3. 如果用户没发布贴子,临时目录会按日期定时清除
    cc7756789
        3
    cc7756789  
    OP
       2015-10-27 10:49:22 +08:00
    @refresh 多谢
    dong3580
        4
    dong3580  
       2015-10-27 10:54:42 +08:00
    做个服务器,定时扫文件对比数据库。
    然而如果不是特殊文件,例如视频之类的,硬盘空间占用不了多少,一般放弃信息发布也不做删除。
    况且你不能保证对方是程序出错退出,直接关闭浏览器放弃发布等等之类的...维护起来也麻烦。
    TingHaiJamiE
        5
    TingHaiJamiE  
       2015-10-27 11:26:03 +08:00
    我觉得如果是存了文件不入数据库,那么就不用删除。
    硬盘又不值钱。
    domty
        6
    domty  
       2015-10-27 11:57:29 +08:00
    一个不太彻底的解决办法。
    我都是把类似上传后的服务器路径存在 session 里的, key 按实际业务确定。
    保存表单数据的时候把它从 session 中取出来,保存成功后从 session 清空。
    每次往 session 存之前先检查原来的该 key 对应的 value 是否有值,有就取出路径删掉。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5768 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:42 · PVG 09:42 · LAX 17:42 · JFK 20:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.