spring中传统得文件上传

传统得文件上传

引入jar包

我创建得时maven项目 所以引入坐标即可

 <dependency> <!-- 文件上传得工具 -->
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>

前端准备 (注意事项)

<!--文件上传 前端要求 请求方式为POST  enctype="multipart/form-data"
<input type="file" multiple>  multiple 为同时上传多个文件
-->
<form action="${pageContext.request.contextPath}/upload/upload01" enctype="multipart/form-data" method="post">
    name: <input type="text" name="name" value="tom"><br/>
    file: <input type="file" name="fileUpload"  ><br/>
    <input type="submit" value="确定上传文件">
</form>

后端 java 控制器 (我这里得路径请求是对应得)

★★★★★★★★★ 因为前台 使用得en 所以我们传统得request 失效了

package com.itheima.web.uploadController;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;

//使用upload 组件完成上传
@Controller("uploadController01")
@RequestMapping("/upload")
public class uploadController01 {
    @RequestMapping("/upload01")  //要使用上传 需要jar包
    public String upload(HttpServletRequest request) throws Exception {  //我们需要获取前台 传入得请求对象 获取请求信息
        //★★★★★★★★★  因为前台 使用得en  所以我们传统得request 失效了
        // 创建一个存放文件下载得根目录  在target下 (其中为了方便区分查找文件  我们定义了日期分类)
        String realPath = request.getServletContext().getRealPath("/upload");
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String format = simpleDateFormat.format(new Date());
        File directory = new File(realPath,format); //在upload目录下创建 当前日期文件夹(yyyy-MM-dd)
        // System.out.println(realPath); //E:/06框架/test/springmvc02/target/springmvc02/upload
        if(!directory.exists()){  //如果没有就创建
            directory.mkdirs();//创建目录
        }


        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); //获取工厂默认值
        //用来解析 request 对象得
        ServletFileUpload uploadr = new ServletFileUpload(diskFileItemFactory);//获取解析器
        //解析请求对象  uploadr.parseRequest(request) 返回list' fileItem    有异常我们先不管 抛出
        List<FileItem> fileItems = uploadr.parseRequest(request);
        System.out.println(fileItems);
        获取上传文件得信息  区分类型  是文件得我们进行处理
        // 解析得对象也是数据 需要遍历  假设是文件   获取文件得后缀名   不确定上传多少 我们使用遍历进行操作
        for (FileItem item : fileItems) {
            if (item.isFormField()) { //普通字段  我们模拟 就先打印一下看看
                //如果传入中文  之前配置中文乱码 是不管用得
                System.out.println("isFormField()------" + item.isFormField());
                System.out.println("getFieldName()------" + item.getFieldName());
                System.out.println("getString()------" + item.getString("UTF-8"));//指定编码 之前得request.set 无效
            } else { //上传字段  是文件 就完成上传
                //获取文件名:
                String filename = item.getName();//得到文件名   1.jpg   或者 c:/destop/1.jpg
                //放置目录下得文件名称一致后 被替换  我们要给 自定文件 命名时不能重复
                //获取文件后缀名,并以UUID作为主文件名进行存放:   UUID文件名.jpg
                String extendName = filename.substring(filename.lastIndexOf("."));//   .jpg
                //UUID 转化字符串后 格式为 xxx - xxx- xxx-  我们把- 去掉
                String uuidFileName = UUID.randomUUID().toString().replace("-","").toUpperCase()+extendName;//SDLKJFLKSDFJL.jpg
                File target = new File(directory,uuidFileName);
                item.write(target);//把上传的文件写入到指定的文件夹中。
                item.delete();//清除缓存
            }
        }
        
        return "success";
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扶摇的星河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值