ssp frontend
file-upload前端原理
1. file-upload.html
1 | <div> |
重点在于:
- ```html
-
1
2
3
4
5
6
7
负责展示用户上传的文件经整理后的fileinfo
2. ```html
<a href="javascript:void(0)" class="btn btn-sm btn-primary" @click="onUpload(fileinfo)" :class="showUploadBtn(fileinfo)">上传</a>
- ```html
<button class=”btn btn-sm btn-primary waves-effect waves-light” @click=”onUploadAll()”>全部上传1
2
3
4
5
6
7
8
9
用户拖拽一个文件进入上传框后,逻辑如下:
0. 一进入该html页面,执行该Vue对象的 init 方法,oUpload 对象初始化一系列只与当前用户有关、与所选择上传文件无关的属性
1. ```js
var dObj = new Dropzone("#upload-select-area", option);
通过Dropzone,绑定对象 option 和 id=”upload-select-area” 的 div 组件,一旦拖拽/选择文件,便执行 option 中的 addedfile: function(file) 方法
- addedfile 方法传入用户选择上传的文件 file,进行类型判断,并增加了一些属性,和 file 本身,一起赋给Vue对象中 data 里的fileDatas: []
若用户选择多个文件,则fileDatas数组中有多个经处理后规范的fileinfo文件对象
规范的fileinfo对象被页面展示
注意:通过Vue,并非直接操纵DOM树,而是先js操纵Vue组件,再由Vue实现对DOM树的操纵、即页面的展示的变化
2. file-upload.js
1 | define(function(require, exports, module) { |
点击上传后,文件传到后端Controller的部分逻辑如下:
向onUpload中传入fileinfo
onUpload 调用 this.oUpload.uploadFile方法,传入 var file = fileinfo.file; 以及成功与失败的回调函数
通过this获取到option中的token和回调函数
判断token后通过AJAX POST发送fileData到后端Controller,其中fileData中包含fileinfo中的file属性,token属性以及所有其他属性
1 | IICUpload.prototype.uploadFile = function(file, succFn, failFn){ |
1 | function IICUpload(option){ |
ajax Post发送后,通过注解@RequestParam(value = “file”),Spring MVC将前端的”file”属性自动匹配地赋给对象MultipartFile file,前端”file”中多余属性则忽视,缺失属性则置为null; 其余属性则自动匹配地赋给对象ULFileInfoVo fileInfo,用于后端的后续业务逻辑。
Spring MVC:
可以在SpringMVC的Controller中具体请求处理方法中,直接使用基本数据类型或者String类型的参数进行对映,只要前端页面和方法中指定的参数名称是完全一致的,这里包括大小写,那么前端这个参数名称所赋有的值,就会传递到后台的请求处理方法中。
由SpringMVC底层的拦截器实现它会将请求中传来的所有参数,请求处理方法中的参数进行对比,如果发现是一模一样的,它就会从请求中把那个参数的值拿出来赋给处理方法中的那个变量,以供后端controller继续操作。
SpringMVC的过滤器不光接收映射同名的参数,而且还会将类型帮助我们转换成功。但是,类型的转换,存在着问题,比如:int类型是整数类型,刚才传来的参数id就是int类型,而值恰好是1,则不会出现问题,可是如果将值改成abc等非数字的内容呢?那肯定是会报错的,因为数字格式异常,无法进行转换。同时,还有传递的时候忘记传递id属性而只传了name属性,或者id属性只给了key,而没有value值,这些情况,都会导致错误的出现。
本例中,后端JavaBean来接收参数 并加入@RequestParam(value = “file”)注解
@RequestParam 注解用来标注在控制器方法的参数上,springmvc 从 request 中获取请求的值赋值给方法的参数 @RequestParam 指定 name 时,可以获取 request 中指定参数的值,相当于 request.getParameter (name)或 request.getParameters (name)
restful风格传值方式:
使用RESTful风格开发Java Web - 简书 (jianshu.com)
REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移),REST 是一种体系结构,而 HTTP 是一种包含了 REST 架构属性的协议,为了便于理解,我们把它的首字母拆分成不同的几个部分:
- 表述性(REpresentational): REST 资源实际上可以用各种形式来进行表述,包括 XML、JSON 甚至 HTML——最适合资源使用者的任意形式;
- 状态(State): 当使用 REST 的时候,我们更关注资源的状态而不是对资源采取的行为;
- 转义(Transfer): REST 涉及到转移资源数据,它以某种表述性形式从一个应用转移到另一个应用。
简单地说,REST 就是将资源的状态以适合客户端或服务端的形式从服务端转移到客户端(或者反过来)。在 REST 中,资源通过 URL 进行识别和定位,然后通过**行为(即 HTTP 方法)**来定义 REST 来完成怎样的功能。
springMVC接收JSON参数详解_白面小生的博客-CSDN博客_springmvc如何接收json数据
GET请求想必大家都不陌生,它将参数以url?username=”admin”&password=123这种方式发送到服务器,并且request.getParameter可以接收到这种参数,我们在浏览器地址栏上也可以看到这一点。而我们Ajax使用的POST,并且发送的是JSON对象,那么后台是如何获取到的呢?答案就在于这个Content-Type x-www-form-urlencoded的编码方式把JSON数据转换成一个字串,(username=”admin”&password=123)然后把这个字串添加到url后面,用?分割,(是不是和GET方法很像),提交方式为POST时候,浏览器把数据封装到HTTP BODY中,然后发送到服务器。所以并不会显示在URL上。
注意:
(1)当Ajax以application/x-www-form-urlencoded格式上传即使用JSON对象,后台需要使用@RequestParam 或者Servlet获取。
(2) 当Ajax以application/json格式上传即使用JSON字符串,后台需要使用@RquestBody获取。在 ajax 中 contentType 设置为 false 是为了避免 JQuery 对其操作,从而失去分界符,而使服务器不能正常解析文件。
ajax中processData: (默认: true) 默认情况下,发送的数据将被转换为对象(技术上讲并非字符串) 以配合默认内容类型 “application/x-www-form-urlencoded”。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。
3. 后端Controller
1 |
|
杂记
SSP: self-service platform
IDR: 标识解析展现 ID Read
API:
FileCenter
工业互联网标识:国家制定的规范 统一的公共数据格式
88.168.100/xxxxxxxx
标识前缀:中国.鑫兴.
顶级节点.二级节点.企业节点
https://ssp.gdsinsing.com/#/statis/home/user-home
https://ssp.gdsinsing.com/index.html#/statis/home/user-home
https默认端口443
http默认端口80
nginx 443
ssp 8095
#/statis/home/user-home=>#/statis/home/user-home.js
require 异步加载
https://ssp.gdsinsing.com/statis/home/user-home.js
https://ssp.gdsinsing.com/statis/home/user-home.html
web页面 一般都是短连接
postman
form-data :上传文件
x-www-form-urlencoded :普通post 键值对,表单数据
raw :数据写在body内 非键值对 RESTful 手机 流行 整个json传过去
authId对应应用白名单,并不对应每个用户
isCont为false则不读文件内容,只读文件路径等信息