SpringMVC之上传文件(传统方式)

SpringMVC上传文件

分析

  1. 编写jsp下的form表单
    表单要有以下属性值
    1. 提交方式必须为post,因为如果是get的话,大小有限制
    2. enctype属性必须设置为:multipart/form-data,因为这样是分段解析,为什么分段,可以看上传图片的请求体在这里插入图片描述
    3. 如何解析,需要使用jar包,有apache提供的两个jar包
<dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
  1. 如何编写Controller类下的方法
    1. 先设置上传的路径,且判断是否有当前路径
    2. 准备解析reques工具
    3. 开始解析,使用parseRequest方法,返回一个List集合
    4. 开始遍历
    5. 筛选是否为普通类型文件,或者是否是上传文件类型,使用isFormField()方法
    6. 获取文件名称,且因名字需要唯一化,使用UUID工具,生成唯一id
    7. 写入文件传出参数文件上传路径与文件名字
    8. 最后,删除临时文件,为什么要删除临时文件,因为上传大于10kb时会产生临时文件,小于10kb直接进缓存区
@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/testFileUpload")
    public String testFileUpload(HttpServletRequest request) throws Exception {
        System.out.println("testFileUpload...");
        //1.设置上传路径
        String path = request.getSession().getServletContext().getRealPath("/upload/");
        //判断路径是否存在
        File file = new File(path);
        if(!file.exists()){
            //创建文件夹
            file.mkdirs();
        }
        //2.解析request对象,获取文件上传项
        ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
        //3.解析
        List<FileItem> items = upload.parseRequest(request);
        //遍历
        for (FileItem item : items) {
             //判断item是否是上传文件类型
            if(item.isFormField()){
                //说明是普通form表单类型
            }else{
                //说明是上传文件项
                //4.获取文件的名称
                String name = item.getName();
                //生成唯一id
                String uuid = UUID.randomUUID().toString().replace("-","");
                name = uuid+"_"+name;
                //5.完成文件上传
                item.write(new File(path,name));
                //6.删除临时文件
                item.delete();
            }
        }
        return "success";
    }

jsp代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>response</title>
</head>
<body>
<h3>文件上传</h3>
<form action="user/testFileUpload" method="post" enctype="multipart/form-data">
    上传文件: <input type="file" name="upload"> <br>
    <input type="submit" value="上传">
</form>
</body>
</html>

如有不足,还望指点

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值