SpringMVC 是一个基于 Java 的 Web 框架,它提供了方便的文件上传和下载功能。下面是它的实现原理简要描述:
- 文件上传:
客户端通过表单(HTML 的 标签)将文件选择并提交到服务器。
服务器接收到请求后,SpringMVC 会将字节流形式的文件内容封装成 MultipartFile 对象。
SpringMVC 使用 MultipartResolver 组件解析请求,将文件保存在服务器上的临时目录中。
控制器方法使用 @RequestParam 注解或直接声明 MultipartFile 参数接收上传的文件。
控制器方法在接收到文件后,可以进行处理,例如保存到数据库或者转存到指定目录。
- 文件下载:
客户端发送下载请求,例如通过点击链接或者表单提交。
服务器接收到下载请求后,通过控制器方法处理请求。
控制器方法使用 HttpServletResponse 对象设置响应的内容类型和头信息,指定为文件下载。
控制器方法使用 OutputStream 将文件内容写入 HttpServletResponse 的输出流。
客户端接收到响应后,展示下载对话框,让用户选择保存文件的位置。
总结起来,文件上传的原理是将文件通过表单提交到服务器,SpringMVC 将其封装成 MultipartFile 对象,然后进行处理;文件下载的原理是将文件内容写入 HttpServletResponse 的输出流,让客户端接收并保存文件。SpringMVC 提供了方便的组件和注解来简化文件上传和下载的操作。
1、文件下载
@RequestMapping("/testDown")
public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
//获取ServletContext对象
ServletContext servletContext = session.getServletContext();
//获取服务器中文件的真实路径
String realPath = servletContext.getRealPath("/static/img/1.jpg");
//创建输入流
InputStream is = new FileInputStream(realPath);
//创建字节数组
byte[] bytes = new byte[is.available()];
//将流读到字节数组中
is.read(bytes);
//创建HttpHeaders对象设置响应头信息
MultiValueMap<String, String> headers = new HttpHeaders();
//设置要下载方式以及下载文件的名字
headers.add("Content-Disposition", "attachment;filename=1.jpg");
//设置响应状态码
HttpStatus statusCode = HttpStatus.OK;
//创建ResponseEntity对象
ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);
//关闭输入流
is.close();
return responseEntity;
}
2、文件上传
文件上传要求form表单的请求方式必须为post,并且添加属性enctype=“multipart/form–data”
SpringMVC中将上传的文件封装到MultipartFile对象中,通过此对象可以获取文件相关信息
上传步骤:
a>添加依赖:
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!--必须通过文件解析器的解析才能将文件转换为MultipartFile对象-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
@RequestMapping("/testUp")
public String testUp(MultipartFile photo, HttpSession session) throws IOException {
//获取上传的文件的文件名
String fileName = photo.getOriginalFilename();
//处理文件重名问题
String hzName = fileName.substring(fileName.lastIndexOf("."));
fileName = UUID.randomUUID().toString() + hzName;
//获取服务器中photo目录的路径
ServletContext servletContext = session.getServletContext();
String photoPath = servletContext.getRealPath("photo");
File file = new File(photoPath);
if(!file.exists()){
file.mkdir();
}
String finalPath = photoPath + File.separator + fileName;
//实现上传功能
photo.transferTo(new File(finalPath));
return "success";
}
3. 好书推荐
包容简介:
本书全面、系统地阐述以人脸识别为代表的信息安全技术,可以降低用户数据信息安全风险。本书主要内容包括人工智能和信息安全概述,挖掘人脸可辨识信息的关键技术,非约束人脸识别、小样本人脸识别、代价敏感人脸、快速正则化联合分类等问题的解决方案,深层局部字典和联合加权核稀疏分类器的构建方案,提升用户信息网络安全性的各种方案,用户信息网络安全的未来等。
本书条理清晰、逻辑性强、内容充实、涵盖范围广,具有较强的学术性和实用性,可供广大人工智能初学者及相关专业的师生学习和参考。
1.1.2 人脸识别技术的发展史 5
1.4 本章小结 22
第2章 挖掘用户可辨识信息的方法 23
2.2 协同表示 26
2.5 深度学习 31
2.5.2 多层感知机 33
2.6 本章小结 42
第3章 非约束性用户的识别方法 43
3.2.1 鲁棒稀疏表示 46
3.3.1 VOD过程 49
3.3.2 IR过程 50
3.4.1 参数设置 52
3.4.2 模拟块遮挡 53
3.4.3 AR人脸数据库的真实遮挡 58
3.5 本章小结 63
第4章 小样本用户的识别方法 65
4.1 小样本用户识别问题 65
4.2.3 联合核协同表示模型 70
4.3.2 Labeled Faces in the Wild人脸数据库 74
4.3.4 相似方法的比较 77
4.4 本章小结 80
5.1 代价敏感人脸识别问题 81
5.4.1 参数设置 89
5.5 本章小结 99
6.1 快速人脸识别问题 101
6.3.1 参数设置 105
6.3.2 Extended Yale B人脸数据库上的人脸识别实验 105
6.3.3 AR人脸数据库上的人脸识别实验 110
6.3.4 FERET人脸数据库上的人脸识别实验 112
6.4 本章小结 119
7.1 大规模人脸识别问题 121
7.2 深度学习框架 123
7.2.1 卷积神经网络 123
7.2.3 迁移学习 126
7.3 深层局部字典的建立 128
7.4 联合加权核协同表示 130
7.5 部分实验结果 131
7.5.1 CMU-PIE人脸数据库上的人脸识别实验 131
7.5.2 CMU-PIE人脸数据库上的加噪遮挡人脸识别实验 132
7.5.3 LFW人脸数据库上的无遮挡人脸识别实验 133
7.5.4 LFW人脸数据库上的同源遮挡人脸识别实验 134
7.6 本章小结 135
第8章 提升用户信息网络安全性的方法 137
8.2 用户信息网络安全的保护方法 141
8.4 本章小结 148
第9章 用户信息网络安全的未来 149
9.1.2 用户信息需求的差异性 155
9.2.1 网络信息资源 157
9.3 用户信息网络安全技术的发展前景 161
9.4 本章小结 164
参考文献 167
附录A 缩略语 175
购买链接 https://item.jd.com/13621817.html
原文地址:https://blog.csdn.net/m0_60915009/article/details/134631229
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_21680.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!