1.    方向1 用户提交表单, 图片和表单同步上传.(由同一服务器处理, 服务器压力大. 没有分离)

2.    方向2 图片和表单分开上传. 如图片访问ftp,表单提交后台(图片和后台分离)
2.1  图片立刻上传, 再提交表单. 
图片每次上传的操作就立刻上传到服务器. 然后将返回的url地址和表单一起提交.

存在问题:图片循环上传甚至不提交表单
(1) 垃圾图片太多
思路1 上传到临时目录, 表单上传成功后移动. 
思路2 通过约定的名字,每次上传前都知道规定的名字. 图片上传自动覆盖之前的图片. 
思路3 通过图片上传后通过redis等写入自己的表单操作id和图片. 只有表单成功请求后, 操作id对应通知redis/db. 通过每天定时的job删除没有对应操作id确认地址的图片(即没有表单对应的图片).
(2) 频繁上传.
通过需要限流解决. 比如代码或者图片服务器.

2.2 用户提交时,提交表单. 图片异步或者同步上传.
(1)用户提交表单时, 触发表单和图片上传分2个操作处理. 用户等待2个处理都成功才返回成功通知. 本质上和1的方法1很类似. 用户提交才处理. 区别是用户提交后是调用一次request处理表单和图片的同时上传. 还是调用多次不同的请求.
调用一次可保证没有垃圾图片, 简单. 回到方法1.
调用多次就存在部分失败的问题,  表单先提交->上传图片->更新表单.
这种表单先提交可以延伸为类似手机提交到本地, 或者web的状态控制. 然后补图片.

(2)用户提交表单, 触发表单和图片上传分2个操作处理. 
表单提交完毕. 操作结束. 图片后台上传(小程序/APP的场景较多)
表单提交完毕. 图片前台模态上传成功/失败 操作才结束

综上可以拆分为
方向1 图片上传实时发生. 表单提交另外发生.
方向2 用户提交时, 才进行图片和表单的提交. 此时将图片和表单作为同个操作事务单元. (如图片base64作为表单的一部分提交)
方向3 用户提交时, 才进行图片和表单的提交. 图片和表单是不同的操作事务单元.
此方案本质和方向1相同. 需要处理垃圾图片, 频繁上传的问题.

方向3的实现思路, 无论图片是前台显示提交(如loading窗口)还是后台上传, 区别只是用户提交后窗口在表单提交还是表单+图片都提交成功后才关闭)
都要处理图片和表单关联的问题. 关联可通过约定图片名字等方式实现.
图片和表单的关联可通过通过表单id或者有一个当前操作的事务id来确定.
比如将该id作为图片名字的一部分.
通过表单id或者事务操作id可保证通过对应表单id来触发告知用户图片上传的成功/失败. 可通过表单关联寻址到图片.
如果只使用事务id, 即可能出现没有表单 只上传图片的情况. 
这也可通过定期将redis或者临时目录的文件和db中的表单对应. 如无对应则进行删除.

建议合理方案为图片名字加密后含对应表单id方式, 表单需要先保存. 如只使用事务id, 则需要定期清理.









puzz: 图片和表单上传的不一致问题的更多相关文章

  1. java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例

    java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...

  2. 相册选择头像或者拍照 上传头像以NSData 图片二进制格式 表单上传

    一.点击头像图片 或者按钮 在相册选择照片返回img,网络上传头像要用data表单上传 (1)上传头像属性 // 图片二进制格式 表单上传 @property (nonatomic, strong) ...

  3. [转]html5表单上传控件Files API

    表单上传控件:<input type="file" />(IE9及以下不支持下面这些功能,其它浏览器最新版本均已支持.) 1.允许上传文件数量 允许选择多个文件:< ...

  4. PHP流式上传和表单上传(美图秀秀)

    最近需要开发一个头像上传的功能,找了很多都需要授权的,后来找到了美图秀秀,功能非常好用. <?php /** * Note:for octet-stream upload * 这个是流式上传PH ...

  5. 一般处理程序上传文件(html表单上传、aspx页面上传)

    html 表单上传文件        一般处理程序由于没有 apsx 页面的整个模型和控件的创建周期,而比较有效率.这里写一个用 html 表单进行文件上传的示例.        1. 表单元素选用 ...

  6. 文件的上传(表单上传和ajax文件异步上传)

    项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举的主要对于小文件上传的处理! 资源下载: 一. ...

  7. 普通文件的上传(表单上传和ajax文件异步上传)

    一.表单上传: html客户端部分: <form action="upload.ashx" method="post" enctype="mul ...

  8. Express下使用formidable实现POST表单上传文件并保存

    Express下使用formidable实现POST表单上传文件并保存 在上一篇文章中使用formidable实现了上传文件,但没将它保存下来. 一开始,我也以为是只得到了文件的相关信息,需要用fs. ...

  9. 文件的上传(1)(表单上传和ajax文件异步上传)

    文件的上传(表单上传和ajax文件异步上传) 项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举 ...

随机推荐

  1. Mysql慢查询-Mysql慢查询详细教程

    一.简介开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能.二.参数说明slow_query_log 慢查询开启状态slow_quer ...

  2. 第一次 刷 WiFi 模块esp8266 感谢创客阿正

    在正哥指导下 第一次 刷 WiFi 模块  少走了 不少弯路 套件里的 两块 机智云  ==== 我的电脑 需要单独供电 先 对应 接好 ic0要记得接gnd 等待上电时要断电重启 等  用助手 返回 ...

  3. 第七届蓝桥杯大赛个人赛决赛(软件类C语言B组)第一题:一步之遥

      这题好多人用爆搜/bfs来做,然而这题可用exgcd(扩展欧几里得)做,而且很简便. 先附原题: 一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里. 矿车停在平直的废弃的轨道上. 他的面 ...

  4. Oracle中计算两个日期时间的差

    --方法1 select floor((sysdate - to_date('2006-09-01 08:00:00', 'yyyy-mm-dd hh24:mi:ss'))) as sDays fro ...

  5. Linux中各个文件的作用

    1.bin: 存放的是执行的常用指令 2.boot: 启动系统的核心文件 3.dev: Linux将设备映射成文件,而dev中放的就是这些设备文件 4.etc: 各种配置文件 5.home: 用户的主 ...

  6. phoneshop cs6破解

    一.以“试用”方式安装photoshop: 二.下载amtlib.dll破解文件,密码:ubx2: 三.备份photoshop目录下的amtlib.dll文件,将下载的amtlib.dll文件拷贝到p ...

  7. xPath 用法总结整理

    xPath 用法总结整理   一.xpath介绍 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 使用路径表达式在 XML ...

  8. python3 sys.path

    wadmin@ansible-test:~/python$ python3Python 3.6.7rc1 (default, Sep 27 2018, 09:51:25) [GCC 8.2.0] on ...

  9. css ——行级元素与块级元素解析

    一 . 先说说二者的本质区别吧:        行级元素是可以和其他元素处于一行,不用必须另起一行.块级元素是每个块级元素都是独自占一行,其后的元素也只能另起一行,并不能两个元素共用一行. 二 .下面 ...

  10. 连接mysql用mysql_connect不能连接

    用mysqli_connect就可以解决. mysqli_array()有连个参数,第一个是连接mysql名. php遇到这个警告Warning: Use of undefined constant ...