springmvc上传文件

本文详细介绍了如何在SpringMVC框架中配置并实现文件上传功能,包括web.xml和springmvc-servlet.xml的配置,自定义JavaBean用于接收上传文件,以及控制器类的编写。同时,提供了上传和显示上传文件的JSP页面示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先配置web.xml在文件中添加

<!-- 上传.jpg文件 -->
<!-- 	为什么要加这一段呢? 因为配置springmvc的servlet的时候,使用的路径是"/",导致静态资源在默认情况下不能访问,所以要加上这一段,允许访问jpg。  
	并且必须加在springmvc的servlet之前 
        如果你配置spring-mvc使用的路径是/*.do,就不会有这个问题了。 -->
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.jpg</url-pattern>
	</servlet-mapping>

再配置springmvc-servlet.xml

<!-- 	开放对上传功能的支持 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

配置文件的javabean

package pojo;

import org.springframework.web.multipart.MultipartFile;
/**在UploadedImageFile中封装MultipartFile类型的字段 image ,用于接受页面的注入

这里的字段 image必须和上传页面upload.jsp中的image
 name="image" 保持一致*/
public class UploadedImageFile {
	MultipartFile image;

	public MultipartFile getImage() {
		return image;
	}

	public void setImage(MultipartFile image) {
		this.image = image;
	}
}

编写上传的jsp
upload.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="uploadImage" method="post" enctype="multipart/form-data">
选择图片:<input type="file" name="image" accept="image/*"/><br/>
<input type="submit" value="上传">
</form>
</body>
</html>

编写控制器类

package controller;
import java.io.File;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.xwork.RandomStringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import pojo.UploadedImageFile;
/**新建类UploadController 作为上传控制器
准备方法upload 映射上传路径/uploadImage
1. 方法的第二个参数UploadedImageFile 中已经注入好了 image
2. 通过 RandomStringUtils.randomAlphanumeric(10);获取一个随机文件名。 因为用户可能上传相同文件名的文件,为了不覆盖原来的文件,通过随机文件名的办法来规避
3. 根据request.getServletContext().getRealPath 获取到web目录下的image目录,用于存放上传后的文件。
4. 调用file.getImage().transferTo(newFile); 复制文件
5. 把生成的随机文件名提交给视图,用于后续的显示**/
@Controller
public class UploadController {
	@RequestMapping("/uploadImage")
	public ModelAndView upload(HttpServletRequest request,UploadedImageFile file) throws Exception{
		String name =RandomStringUtils.randomAlphanumeric(10);
		String newFileName =name +".jpg";
		File newFile = new File(request.getServletContext().getRealPath("/image"),newFileName);
		newFile.getParentFile().mkdirs();
		file.getImage().transferTo(newFile);
		
		ModelAndView mav = new ModelAndView("showUploadedFile");
		mav.addObject("imageName", newFileName);
		System.out.println(request.getServletContext().getRealPath("/image"));
		return mav;
	}
}

然后编写显示文件的页面

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<img src="image/${imageName}"/>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值