Java EE之第16章文件上传和下载

SpringMVC文件上传与下载
本文详细介绍了如何在SpringMVC框架中实现文件的上传和下载功能,包括配置MultipartResolver、使用MultipartFile接口处理上传文件,以及通过ResponseEntity实现文件下载。

第16章文件上传和下载

16.1文件上传

多数文件上传是通过表单形式提交给后台服务器的

要实现文件上传功能,需要提供一个文件上传的表单,表单必须满足以下3个条件:

(1)form表单的method属性设置为post

(2)form表单的enctype属性设置为multipart/form-data

(3)提供<input type="file" name="filename" />的文件上传输入框

文件上传表单示例代码如下:

<form action="uploadUrl" method="post" enctype="multipart/from-data">
	<input type="file" name="filename" multiple="multiple">
	<input type="submit" value="文件上传" />
</form>

<input>元素中的multipe属性: 是HTML中的新属性,如果使用该属性,则可以同时选择多个文件进行上传上传

当客户端from表单的enctype属性为multipart/from-data时,浏览器会采用二进制的方式来处理表单数据,服务器端会对文件上传的请求进行解析处理

Spring MVC为文件上传提供了直接的支持,这种支持是通过MultipartResolver(多部件解析器)对象实现的

MultipartResolver(多部件解析器):是一个接口对象,需要通过它的实现类CommonsMultipartResolver来完成文件上传工作。其具体配置方式如下:

<bean id="multipartResolver" class=
   "org.springframework.web.multipart.commons.CommonsMultipartResolver">
          <!-- 设置请求编码格式,必须与JSP中的pageEncoding属性一致,默认为ISO-8859-1-->
          <property name="defaultEncoding" value="UTF-8" />
          <!-- 设置允许上传文件的最大值(2MB),单位为字节-->
          <property name="maxUploadSize" value="2097152" />
          ...
</bean>

通过<property>元素可以对文件解析器类CommonsMultipartResolver的如下属性进行配置:

(1)maxUploadSize:上传文件最大长度(以字节为单位)

(2)maxInMemorySize:缓存中的最大尺寸

(3)defaultEncoding:默认编码格式

(4)resolveLazily:推迟文件解析,以便在Controller中捕获文件大小异常

注意因为MultipartResolver接口的实现类CommonsMultipartResolver内部是引用MultipartResolver字符传获取该实现类对象并完成文件解析的,所有在配置CommonsMultipartResolver时必须指定该Bean的id为MultipartResolver

MultipartFile接口类型的参数file:上传到程序中的文件就是被封装在该参数中的

MultipartFile接口:提供了获取上传文件,文件名称等方法;这些方法及其说明如下:

方法说明
byte[] getBytes()以字节数组的形式返回文件的内容
Sting getContentType()返回文件的内容类型
InputStream getInputStream()读取文件内容,返回一个inputStream流
String getName()获取多部件form表单的参数名称
String getOriginalFilename()获取上传文件的初始化名
long getSize()获取上传文件的大小,单位是字节
boolean isEmpty()判断上传的文件是否为空
void transferTo(File file)将上传文件保存到目标目录下

16.2文件下载

文件下载:将文件服务器重的文件下载到本机上

在Spring MVC环境中,实现文件下载大致可分为两个步骤:

(1)在客户端页面使用一个文件下载的超链接,该链接的href属性要指定后台文件下载的方法以及文件名(需要先在文件下载目录中添加了一个名称为“1.jpg”的文件),具体代码示例如下:

<a href="${pageContext.request.contextPath }/download?filename=1.jpg">
	文件下载
</a>

(2)在后台Controller类中,使用Spring MVC提供的文件下载方法进行文件下载。Spring MVC提供了一个ResponseEntity类型的对象,使用它可以很方便地定义返回的HttpHeaders对象和HttpStatus对象,通过对这两个对象的设置,即可完成下载文件时所需的配置信息。文件下载的示例代码如下:

@RequestMapping("/download")
	public ResponseEntity<byte[]> fileDownload(HttpServletRequest request,
	                                           String filename) throws Exception{
    	// 指定要下载的文件所在路径
	    String path = request.getServletContext().getRealPath("/upload/");
	    // 创建该文件的对象
	    File file = new File(path+File.separator+filename);
	    // 设置响应头
	    HttpHeaders headers = new HttpHeaders();
	    // 通知浏览器以下载的方式打开文件
	    headers.setContentDispositionFormData("attachment", filename); 
	    //定义以流的形式下载返回文件数据
	    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
	    // 使用Sring MVC框架的ResponseEntity对象封装返回下载数据
	   return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),
	                                                       headers,HttpStatus.OK);
	}

ResponseEntity对象:用于直接返回结果对象
设置响应头信息中的MediaType:代表是Interner Media Type(即互联网媒体类型),也叫做MIME类型
APPLICATION_OCTET_STREAM:表示以二进制流的形式下载数据;
HttpStatus:表示200,即服务器已经成功处理了请求

解决浏览器中文件下载时的中文乱码问题:可以在前端页面发送请求前对中文名进行统一编码,然后再后要控制器类中对文件名称进行相应的转码

标题SpringBoot智能在线预约挂号系统研究AI更换标题第1引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化改进,提升系统性能。第5研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值