后端主流框架-SpringMvc-day2

Java中的文件上传

1 文件上传

  1. 文件上传:指的是将本地的文件复制到服务器上;

  2. SpringMvc中的文件上传是对原生文件上传的封装,目的是,较少代码量,提高开发效率;

  3. 文件上传三要素:

    1. 表单的提交的方式必须是POST请求(get请求对提交的数据)

    2. 表单中必须有一个文件上传项:<input type="file" name="upload"/>,文件上传项必须有name属性和值;

    3. 表单的enctype属性的值必须是multipart/form-data

1.1 添加jar文件
  1. 由于SpringMVC自己没有实现文件上传,它使用的是apache.commons.fileupload
  • com.springsource.org.apache.commons.fileupload-1.2.0.jar
  • com.springsource.org.apache.commons.io-1.4.0.jar
xml 复制代码
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.3</version>
    </dependency>
1.2 jsp页面
1.3 配置上传解析器

SpringMVC使用MultipartFile来进行文件上传,所以我们首先要配置MultipartResolver,用于处理表单中的file,如果没有配置就会报如下错误:提示告诉开发者你没有配置文件上传解析器:

配置MultipartResolver:注意id="multipartResolver"的id值不能乱写

xml 复制代码
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<!-- 设置上传文件的最大尺寸为1MB -->
	<property name="maxUploadSize">
		<!-- spring el写法:1MB -->
		<value>#{1024*1024}</value>
	</property>
     <!-- 效果同上 -->
<property name="maxUploadSize" value="1048576" />
</bean>
1.4 后台处理
java 复制代码
@Controller
public class UploadController {
	@RequestMapping(value="/upload",method=RequestMethod.POST)
	public String uploadFile(MultipartFile fileUpload,String name,HttpServletRequest req) throws FileNotFoundException, IOException {
		
		System.out.println("普通表单获取方式:" + name);
		
		//上传表单信息:注意MultipartFile对象的名称必须与上传表单项的name属性值一致
		System.out.println("上传文件是否为空:" + fileUpload.isEmpty());
		System.out.println("上传文件的大小(字节):" + fileUpload.getSize());
		System.out.println("上传文件的类型:" + fileUpload.getContentType());
		System.out.println("上传表单name属性值:" + fileUpload.getName());
		System.out.println("上传文件名:" + fileUpload.getOriginalFilename());

	// 获取upload真实路径:一大巨坑(uploadFile千万不要和请求upload一样的名字,否则第二次上传出现405)
		String realPath = req.getServletContext().getRealPath("/uploadFile");
		File file = new File(realPath);
		if (!file.exists()) {// 如果upload文件夹不存在,就创建
			file.mkdirs();
		}

		String prefix = UUID.randomUUID().toString().replaceAll("-", "");
//使用UUID加前缀命名文件,防止名字重复被覆盖
		String fileName = prefix+"_"+fileUpload.getOriginalFilename();

		InputStream in= fileUpload.getInputStream();;//声明输入输出流
		OutputStream out=new FileOutputStream(new File(realPath+"\\"+fileName));//指定输出流的位置;

		//使用IOUtils.copy实现文件复制 
		IOUtils.copy(in, out);
		System.out.println("上传成功");
		in.close();
		out.close();
		return "redirect:/upload.jsp";
	}
}
相关推荐
天远数科12 分钟前
风险治理实战:基于天远车信盟出险构建自动化理赔核保流水线
java·网络·人工智能·自动化
骇客野人38 分钟前
SpringBoot电商系统用户注册、登录、留存及数据埋点设计与落地实施方案
java·spring boot·后端
qiuhaipeng11 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
wxwx_bscxy3222 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
evans在进步3 小时前
Tomcat NIO 工作原理详解:从 Acceptor、Poller 到容器处理链
java·tomcat·nio
渡我白衣4 小时前
并查集:基础认识与模拟实现
android·java·javascript·数据结构·c++·算法·并查集
电商API_180079052474 小时前
电商商品价格监控工具淘宝京东商品价格抓取API项目实操分享
java·大数据·开发语言·前端·数据挖掘
zzzll11114 小时前
深度剖析:HashMap 并发死循环与 ConcurrentHashMap 两代演进全解
java·开发语言
秋名RG4 小时前
2026/5/27 生产事故复盘与整改方案
java
血小板要健康5 小时前
链表 阶段算法总结
java·数据结构·笔记·算法·leetcode·链表