文件上传--基于Spring MVC框架+SmartUpload

摘要:
好的,让我们直接进入代码。jar包是jspSmartUpload.jar。如果有类似的jar包,例如commons-fileupload-1.2.2,只需留下一个即可。否则,它将发生冲突并报告错误。首先,它是一个简单的页面。它很难看,但可以使用:˂!

这篇文章是介绍文件上传的,由于在spring MVC上实现起来和直接在servlet中写有些不同,所以特地写了一下这篇文章,关于不同点,大家可以先阅读一下上一篇文章。好了,下面直接上代码。

jab包是jspSmartUpload.jar,如果有类似的jar包如:commons-fileupload-1.2.2,留一个即可,否则会冲突报错

首先是一个简单的页面(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=utf-8">
<meta http-equiv="pragma" content="no-cache" />
<base target="_self">
<title>文件上传</title>
</head>
<body>
	<h5>文件上传</h5><hr/>
	<form   action="http://localhost:8080/springMVC/fileLoad/upload.do" enctype="multipart/form-data" method="post">
		<div><input type="file" size="25" maxlength="80" name="file_upload"/></div>
		<div><input type="submit" value="上传"/></div>
	</form>
</body>
</html>
效果图:

文件上传--基于Spring MVC框架+SmartUpload第1张

然后是controller代码,至于为什么这样写,可以参考上一篇文章:

package module.system.controller;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import module.system.common.FileLoad;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.ServletConfigAware;
import org.springframework.web.context.ServletContextAware;
/**
 * 文件上传下载.
 * 
 */
@Controller
@RequestMapping("/fileLoad")
public class FileLoadController implements ServletConfigAware,ServletContextAware{
	
	private ServletContext servletContext;
	@Override
	public void setServletContext(ServletContext arg0) {
		this.servletContext = arg0;
	}
    private ServletConfig servletConfig;
	@Override
	public void setServletConfig(ServletConfig arg0) {
        this.servletConfig = arg0;
	}
	
	@RequestMapping(value = "/upload.do", method = RequestMethod.POST)
	@ResponseBody  //此注解表明返回值跳过视图处理部分,直接写入 http response body中
	public String upload(HttpServletRequest request,HttpServletResponse response) {
		 
		FileLoad fileLoad = new FileLoad();
		try {
			fileLoad.upload(request, response,servletConfig);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return "";
	}

	
}
接着是FileLoad类:

package module.system.common;

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jspsmart.upload.SmartFile;
import com.jspsmart.upload.SmartUpload;


/**
 * 文件上传下载.
 * @author nagsh.
 *
 */
public class FileLoad{

	/**
	 * 文件上传.
	 * @param request
	 * @param response
	 * @return
	 * @throws ServletException
	 * @throws IOException
	 */
	public String upload(HttpServletRequest request, HttpServletResponse response,ServletConfig config) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		//新建一个SmartUpload对象
		SmartUpload mySmartUpload=new SmartUpload();
		String fileId = "";
		try{
			//上传初始化
			mySmartUpload.initialize(config, request, response);
			//设定每个上传文件的最大长度
			mySmartUpload.setMaxFileSize(1*512*1024);
			//设定总上传数据的长度
			mySmartUpload.setTotalMaxFileSize(1*1024*1024);
			//设定允许上传的文件的类型,只允许上传java,doc,txt文件
			mySmartUpload.setAllowedFilesList("java,doc,txt");
			//设定禁止上传的文件的类型,禁止上传带有exe,bat文件
			mySmartUpload.setDeniedFilesList("exe,bat");
			//上传文件
			mySmartUpload.upload();
			
			//处理每个上传文件
			for(int i=0;i<mySmartUpload.getFiles().getCount();i++)
			{
				SmartFile file=mySmartUpload.getFiles().getFile(i);
				//判断用户是否选择了文件
				if(!file.isMissing()){
					//另存到以Web应用程序的根目录为文件根目录的目录下
					//(声明一下:在Myeclipse中,该目录位于工程下的.metadata/.me_tcat/webapps/该工程目录/upload/)
					//生成唯一的文件索引(日期+两个随机数)
					String fileName =file.getFileName();
                    String data[] = fileName.split("\.");
                    System.out.println(data.length);
                    String fileType = data[1];   //文件类型
                    System.out.println(fileType);
					Date now = new Date();
					DateFormat YMD = new SimpleDateFormat("yyyyMMdd");//年-月-日
					String ymd = YMD.format(now);//当前年-月-日
					Random random = new Random();
					int r1 = random.nextInt(99999);
					int r2 = random.nextInt(99999);
					fileId = ymd+r1+""+r2;
					System.out.println(fileId);
					file.saveAs("/upload/"+fileId+"."+fileType,mySmartUpload.SAVE_VIRTUAL);
				}
			}
		}catch(Exception e){//异常处理
			//打印自定义异常信息
		}
		return fileId;
	}
	
	
	
	public static void main(String[] args) {
		

	}

}
测试时写一个按钮,点击后弹出上面那个页面就行。

文件上传后的名字是随机生成的,这块可以根据实际情况改,代码中写明白了。

还要强调的是我写的这个例子文件是上传到tomcat/webapps/项目/upload下,所以需要先在tomcat下创建一个文件夹。




版权声明:本文为博主原创文章,未经博主允许不得转载。

免责声明:文章转载自《文件上传--基于Spring MVC框架+SmartUpload》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IOS 原生解析JSON 问题C#使用DataContractJsonSerializer实现Json格式的序列化和反序列化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于Spring IOC (DI-依赖注入)需要知道的一切

关联文章: 关于Spring IOC (DI-依赖注入)你需要知道的一切 关于 Spring AOP (AspectJ) 你该知晓的一切 《Spring入门经典》这本书无论对于初学者或者有经验的工程师还是很值一看的,最近花了点时间回顾了Spring的内容,在此顺带记录一下,本篇主要与spring IOC相关 ,这篇博文适合初学者也适合spring有过开发经...

Neo4J图库的基础介绍(二)-图库开发应用

我们接着Neo4J图库的基础介绍(一)继续介绍Neo4J图库。 JAX-RS是一个用于构建REST资源的Java API,可以使用JAX-RS注解装饰每一个扩展类,从而让服务器处理对应的http请求,附加注解可以用来控制请求和响应的格式,http头和URI模板的格式。 下面看一个服务器扩展实现的示例,允许客户端请求社交网络的两个成员之间的距离 @Pa...

整理分布式锁:业务场景&amp;amp;分布式锁家族&amp;amp;实现原理

1、引入业务场景 业务场景一出现: 因为小T刚接手项目,正在吭哧吭哧对熟悉着代码、部署架构。在看代码过程中发现,下单这块代码可能会出现问题,这可是分布式部署的,如果多个用户同时购买同一个商品,就可能导致商品出现库存超卖 (数据不一致)现象,对于这种情况代码中并没有做任何控制。 原来一问才知道,以前他们都是售卖的虚拟商品,没啥库存一说,所以当时没有考虑那么多...

spring基于注解的IOC配置 知识点

明确:注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。 配置注解扫描的包:声明到指定的包下去进行扫描,如果发现类上有对应的注解,将其装配到容器中 <context:component-scan base-package="cn.XXX"></context:component-scan>...

Redis——Springboot集成Redis集群

前言 在 springboot 1.5.x版本的默认的Redis客户端是 Jedis实现的,springboot 2.x版本中默认客户端是用 lettuce实现的。 Lettuce 与 Jedis 比较 Lettuce 和 Jedis 的都是连接 Redis Server的客户端。 Jedis 在实现上是直连 redis server,多线程环境下非线...

springboot-使用assembly进行项目打包

一、相关依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version&g...