SpringMVC学习(四)------文件上传

一、文件上传过程

  1. 构建文件名
  2. 指定服务器端文件所存储的路径
  3. 转存到指定的路径

二、案例

  1. 导入所需要的jar包并配置
    在这里插入图片描述
  2. 在SpringMVC的配置文件中添加配置一个用于文件上传的组件
<!--注册文件上传组件-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
  1. 创建一个用于文件上传的表单页面imageupload.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/admin/up.action" method="post" enctype="multipart/form-data">
    <p>图片:</p>
    <input type="file" name="upload">
    <input type="submit" value="上传">
</form>
</body>
</html>

  1. 创建一个新的工具包utils并添加文件名处理的工具FileNameUtil.java
package com.oracle.utils;

import java.util.UUID;

public class FileNameUtil {
	//根据UUID生成文件名去掉UUID之间的横杠
	public static String getUUIDFileName() {
		UUID uuid = UUID.randomUUID();
		return uuid.toString().replace("-", "");
	}
	//从请求头中提取文件名和类型
	public static String getRealFileName(String context) {
		// Content-Disposition: form-data; name="upload"; filename="a_left.jpg"
		int index = context.lastIndexOf("=");
		String filename = context.substring(index + 2, context.length() - 1);
		return filename;
	}
	//根据给定的文件名和后缀截取后缀
	public static String getFileType(String fileName){
		//9527s.jpg
		int index = fileName.lastIndexOf(".");
		return fileName.substring(index);

		//8b7cb153974c4947ad6934a3213dd1f4.jpg
	}
}

  1. 在web目录下创建一个包images用于存储文件
  2. 创建一个show.jsp显示图片
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
图片:<img src="${pageContext.request.contextPath}/images/${imgname}">
</body>
</html>

  1. 创建一个新的控制器组件编写文件上传的方法
    ImageUploadAction.java
package com.oracle.controller;

import com.oracle.utils.FileNameUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;

@Controller
@RequestMapping("/admin")
public class ImageUploadAction {
    @RequestMapping("/up")
    public  String up(@RequestParam MultipartFile upload, HttpServletRequest request){
        //构建文件名,使用UUID起名,使用原始文件的后缀
         String saveFileName= FileNameUtil.getUUIDFileName()+FileNameUtil.getFileType(upload.getOriginalFilename());
        System.out.println("构建的文件名字"+saveFileName);
         //指定服务器端存储路径
          String path=request.getServletContext().getRealPath("/images");
        System.out.println("服务器端存储路径"+path);
        //进行文件流转存 C:\Users\25717\Desktop\idea-workspace\springmvc_01\web\images\
        //try catch快捷键 ctrl+alt+t
        try {
            upload.transferTo(new File(path+saveFileName));
        } catch (IOException e) {
            e.printStackTrace();
        }

        request.setAttribute("imgname",saveFileName);
        return "show";
    }
}

  1. 运行前将工程名的后缀改为web否则无法将文件存储到images下
    在这里插入图片描述
  2. 运行项目,项目会默认跳转到index.jsp页面,需要手动在imageupload.jsp运行,且由于注册springmvc时后缀都是action所以需要手动改为jsp
    在这里插入图片描述在这里插入图片描述
  3. 运行结果.
    在这里插入图片描述点击上传后
    在这里插入图片描述在这里插入图片描述
发布了19 篇原创文章 · 获赞 6 · 访问量 1039

猜你喜欢

转载自blog.csdn.net/weixin_43288999/article/details/104691231