SpringMVC使用FileUpload上传文件

简介:

进口FileUpload和common-io的Jar包

注意:1、Struts2其它方法需要使用的:struts2过滤,将改变reqeust类型,由HttpServletRequest成为MultiPartRequestWrapper

1、Test.jsp:

<form action="<%=basePath%>self/testFileUpload.do" method="post" enctype="multipart/form-data">
    	<input type="text" name="num">
    	<input name="img1" type="file" accept="image/gif,image/jpg,image/png,image/jpeg"/>
    	<input name="img2" type="file" accept="image/gif,image/jpg,image/png,image/jpeg"/>
    	<input type="submit" name="test">
    	<input type="reset" name="test1">
    </form>

2、controller:

@RequestMapping(value="/testFileUpload")
	public void  testFileUpload(HttpServletRequest request,HttpServletResponse response) throws Exception{
		String num = "";
		String img1 = "";
		String img2 = "";
		String fileName = "";
		try {
			String t = request.getCharacterEncoding();
			boolean isMultipart = ServletFileUpload.isMultipartContent(request);//推断是否是表单文件类型
			if(isMultipart){
				DiskFileItemFactory factory = new DiskFileItemFactory();
				ServletFileUpload upload = new ServletFileUpload(factory);
				upload.setHeaderEncoding(request.getCharacterEncoding());//这里非常重要啊 解决linux环境下上传文件名称乱码的问题
				//upload.setFileSizeMax(3*1024*1024);//3M
				List items = upload.parseRequest(request);
				if(items.size() == 0){
					System.out.println("无数据");
				}
				Iterator<Object> formItem = items.iterator();
				while(formItem.hasNext()){
					FileItem item = (FileItem) formItem.next();
					//假设是表单元素
					if(item.isFormField()){
						if (item.getFieldName().equals("num")) {
							num = item.getString(request.getCharacterEncoding()).trim();
						}
					}
					//假设不是表单元素
					if(!item.isFormField()){
						String name = item.getName();
						String type = item.getContentType();
						long sizeInBytes = item.getSize();
						
						try {
							String fullName = item.getName().trim();
							if(fullName != ""){
								fileName = System.currentTimeMillis() + fullName.substring(fullName.indexOf("."));
								if(item.getFieldName().equals("img1")){
									fileName = "img1-" + System.currentTimeMillis() + fullName.substring(fullName.indexOf("."));
								}
								if(item.getFieldName().equals("img2")){
									fileName = "img2-" + System.currentTimeMillis() + fullName.substring(fullName.indexOf("."));
								}
								String tomcatRoot = FileOperator.getRootPath();
								String path = tomcatRoot;
								if(FileOperator.FileUploadEx(path, fileName, item.getSize(), item.getInputStream())){
									if(item.getFieldName().equals("img1")){
										System.out.println("testimg1");
									}
									if(item.getFieldName().equals("img2")){
										System.out.println("testimg2");
									}
								}
							}
							
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				}
			}else{
				System.out.println("非multipart/form-data提交方式");
			}
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


版权声明:本文博客原创文章,博客,未经同意,不得转载。






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4634845.html,如需转载请自行联系原作者


相关文章
|
供应链 监控 数据可视化
供应链管理:理解供应链管理
供应链管理:理解供应链管理
637 0
使用ruoyi-vue控制数据权限
使用ruoyi-vue控制数据权限
1465 0
|
11月前
|
算法 安全 关系型数据库
后端技术在现代软件开发中的重要性与应用
本文将深入探讨后端技术在现代软件开发中的关键作用及其广泛应用。我们将从后端开发的基本概念入手,逐步解析其在构建高性能、可扩展和安全的软件系统中的核心地位。通过具体案例,展示不同后端技术如何满足各种复杂业务需求,从而帮助企业实现数字化转型。最后,文章还将探讨未来后端技术的发展趋势,为开发者提供前瞻性的指导。
|
10月前
|
机器学习/深度学习 自然语言处理 监控
CNN的应用场景
【10月更文挑战第23天】CNN的应用场景
703 3
|
11月前
|
存储 移动开发 数据库
HTML5 Web IndexedDB 数据库常用数据存储类型
IndexedDB 支持多种数据存储类型,满足复杂数据结构的存储需求。它包括基本数据类型(如 Number、String、Boolean、Date)、对象(简单和嵌套对象)、数组、Blob(用于二进制数据如图像和视频)、ArrayBuffer 和 Typed Arrays(处理二进制数据)、结构化克隆(支持 Map 和 Set 等复杂对象),以及 JSON 数据。尽管不直接支持非序列化数据(如函数和 DOM 节点),但可以通过转换实现存储。开发者应根据具体需求选择合适的数据类型,以优化性能和使用体验。
|
人工智能 数据可视化 定位技术
【工具使用】QGIS导入csv文件进行数据可视化
【工具使用】QGIS导入csv文件进行数据可视化
755 0
|
消息中间件 JSON 监控
golang读取conf文件的两种方式(ini和Viper)
golang读取conf文件的两种方式(ini和Viper)
605 0
|
机器学习/深度学习 算法 搜索推荐
OpenSearch全新版本试用指南
OpenSearch产品版本全新上线,产品将以【行业算法版】、【高性能检索版】、【向量检索版】、【召回引擎版】四个版本提供服务,满足不同搜索业务场景需求。您可根据自身业务需求选择试用体验~
1545 0
OpenSearch全新版本试用指南
|
JSON 测试技术 Android开发
基于AirTest+Python的ios自动化测试demo(微信朋友圈无限点赞)
AirTest相比Appuim有个好处就是可以对GUI图片进行捕捉和最新版本支持WebView(目前Appuim不支持iOS12的WebView进行Xpath抓取)
799 0
|
机器学习/深度学习 并行计算 C++
VS2017中嵌入CUDA编程的一些坑
VS2017中嵌入CUDA编程的一些坑
VS2017中嵌入CUDA编程的一些坑