SpringMVC文件上传下载(单文件、多文件) (2)

这样你就可以得到一个完整的包含web模块(Springmvc)的Springboot项目,就可以在里面编写咱们项目的代码。

在这里插入图片描述

目录介绍

上面创建完的基于Springboot的Springmvc项目,默认有若干文件和文件夹,不同文件和文件夹有着不同的职责:

java:用来编写java服务端相关代码,例如Controller,Dao,Service等。

application.properties: 编写一些项目和框架的配置内容以及和第三方框架整合配置等

static: 静态资源目录,用来存放html、JavaScript、图片等资源。

teamplates:用来编写Thymeleaf等模板引擎,这里不使用

pom.xml:编写maven项目jar包资源依赖。如果项目需要引入其他依赖或者修改打包方式可以进行修改。

对于web项目的文件上传,需要进行一定配置以满足我们的使用需求,我们在application.propertis进行以下配置:

# 允许项目中文件上传 spring.servlet.multipart.enabled=true # 上传文件的临时目录 (一般情况下不用特意修改) #spring.servlet.multipart.location= # 上传文件最大为 1M (默认值 1M 根据自身业务自行控制即可) spring.servlet.multipart.max-file-size=104857600 # 上传请求最大为 10M(默认值10M 根据自身业务自行控制即可) spring.servlet.multipart.max-request-size=104857600 # 文件大小阈值,当大于这个阈值时将写入到磁盘,否则存在内存中,(默认值0 一般情况下不用特意修改) spring.servlet.multipart.file-size-threshold=0 # 判断是否要延迟解析文件(相当于懒加载,一般情况下不用特意修改) spring.servlet.multipart.resolve-lazily=false

当然,你对文件有大小等其他要求可以对配置进行自行更改。到这里带有Springmvc环境的项目已经创建完成啦,剩下的只需要编写前端、服务端代码运行测试即可。

单文件上传

下面请跟我实战 Springmvc单文件上传。一个完整的文件上传项目有两部分组成:前端界面和服务端程序。

前端设计

对于前端页面,我们使用你一定熟悉的html而不选用其他模板引擎。而form表单是html文件上传的核心组件,你在使用前需要了解它的一些属性。

表单的enctype属性
上面说了一个表单文件传输的大体流程,你也知道表单有个至关重要的属性:enctype。而entype值通常有以下三种:

application/x-www-form-urlencoded:默认编码方式,在发送前编码所有字符(默认)使用url编码方式,和get请求有些相似。但这种方式如果发送大量二进制数据效率会比较低。

multipart/form-data:不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。通常用来向服务端发送二进制数据,而我们的文件也主要以二进制的方式进行传输。

text/plain:空格转换为 "+" 加号,但不对特殊字符编码。

所以本单文件上传案例中,需要注意以下事项:

表单的enctype要为multipart/form-data类型,表示二进制传输。

在一个form表单内定义一个input为file属性的标签,代表文件上传。

form表单的method需要为post。

enctype要为multipart/form-data类型,表示二进制传输。

前端页面的规则了解之后你在static下创建一个index1.html文件,里面具体的代码内容为:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>单文件上传</title> </head> <body> <h2>单文件上传</h2> <form action="onfile" method="post" enctype='multipart/form-data'> <input type="file" ><br> <input type="submit" value="提交"> </form> </body> </html>

其中action="onfile"代表的为请求地址为onfile,这里都在项目内所以用相对地址即可,如果上传为其他接口也可填写对应的绝对地址。这样前端页面就编写完成,我们还需要编写文件上传对应服务端模块。

服务端设计

服务端主要负责文件接受,在前端看起来实现文件上传的页面很简单,但实际上在服务端的文件接收并没有那么容易,因为传过来的不光光是这一个(或多个)二进制文件,还附带一些头信息、文件名等等数据。打包过来的数据如果是文本数据解析可能还好,但是二进制文件数据一旦出现一点错误可能得到的整个文件都是损坏的。并且在咱们java web技术栈中文件上传也是有一定发展的历史的:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfjyx.html