几种java上传文件简单的写法

在做java web项目时候,大多数情况下有上传文件或者是图片的功能需求,这里介绍的主要是java后台的集中写法,至于判断是否是哪种问价类型或者是是否是图片,前后端都可以,我的做法是前端的上传插件功能很强大,一般就在前端判断了,后台java代码只是辅助的判断就可以了。以下的几个例子也是网上来看到的,自己敲了一遍,有一些收货。

前台代码:

<form name="form1" action="${pageContext.request.contextPath}/fileUpload/mulpart" method="post" enctype="multipart/form-data">
		<input type="file" name="file"> <input type="submit" value="提交" />
</form>

1.文件留的上传方式(java基础就应该会这些了)

后台代码:

@RequestMapping("/mulpart")
public String fileUpload(@RequestParam("file") CommonsMultipartFile file,ModelMap model) throws IOException{
	try {
		OutputStream oStream = new FileOutputStream("D:/file/"+new Date().getTime()+ file.getOriginalFilename());
		InputStream iStream = file.getInputStream();
		int temp;
		while((temp=iStream.read())!=(-1)){
			oStream.write(temp);
		}
		oStream.flush();
		oStream.close();
		iStream.close();
		
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	}
	
	String fileName = file.getOriginalFilename();
	model.addAttribute("fileName", fileName);
	return "success";
}

这里返回success,是返回的个一成功页面,带着参数的fileName

succes.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head>
    <title>success</title>
</head>
<body>
文件名 :<b> ${fileName} </b> - 上传成功!
</body>
</html>

2.multipart提供的file.transferTo方法上传文件

@RequestMapping("/mulpart")
public String fileUpload1(@RequestParam("file") CommonsMultipartFile file,ModelMap modelMap){
	String path = "D:/file/"+new Date().getTime()+file.getOriginalFilename();
	File file2 = new File(path);
	try {
		file.transferTo(file2);
	} catch (IllegalStateException | IOException e) {
		e.printStackTrace();
	}
	modelMap.addAttribute("fileName", file.getOriginalFilename());
	return "success";	
}

直接采用multipart提供的file.transferTo()的方法,将文件直接上传到存放的地址。

3.利用spring的上传方式

(1)pom文件添加上传文件的依赖包

<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>
<dependency>
	<groupId>commons-codec</groupId>
	<artifactId>commons-codec</artifactId>
	<version>1.9</version>
</dependency>

(2)spring的配置文件中配置上传文件的

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
	<!-- 默认编码 -->  
	<property name="defaultEncoding" value="utf-8" />    
	<!-- 文件大小最大值 -->  
	<property name="maxUploadSize" value="10485760000" />    
	<!-- 内存中的最大值 -->  
	<property name="maxInMemorySize" value="40960" />    
</bean>   

(3)java代码:

@RequestMapping("/mulpart")
public String fileUpload2(HttpServletRequest request) throws IllegalStateException, IOException{
	//创建解析器
	CommonsMultipartResolver cResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
	
	//检测form中是否有enctype="multipart/form-data"
	if (cResolver.isMultipart(request)) {
		
		//将request变成多部分request
		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
		
		//获取所有的文件名
		Iterator iterator = multipartRequest.getFileNames();
		
		while (iterator.hasNext()) {
			
			MultipartFile file = multipartRequest.getFile(iterator.next().toString());
			
			//System.out.println(iterator.next().toString());
			if (file!=null) {
				String uuid = UUID.randomUUID().toString().replaceAll("-", "");
				String path = "D:/file/"+new Date().getTime()+uuid;
				file.transferTo(new File(path));
			}
		}
	}
	return null;
}

这里一开始的文件明,采用的iterator.next();运行报错,这是因为这个方法在便利的时候,循环主体内只能出现的一次,所以报错。在项目开发中遇到过的上传图片的功能需求,要是上传的图片非常多,这时就会产生图片名的重复,所以采用uuid的方法来保存图片名,这要就不会出现重复的图片名。然后把用uuid生成图片名保存在数据库中。

猜你喜欢

转载自blog.csdn.net/qq_33356585/article/details/88977140
今日推荐