SpringMVC实现文件上传multipartResolver

1、导入相关依赖

<!-- 文件上传 -->
<dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.3.2</version>
</dependency>

2、配置文件上传参数

<!-- 配置文件上传的参数 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<property name="defaultEncoding" value="utf-8"></property>
	<property name="maxUploadSize" value="104857600"></property>
	<!-- 最大上传文件大小:  104857600/1024=102400K=100M-->
	<property name="maxInMemorySize" value="40480"></property>
	<!-- 设置一个大小,multipart请求小于这个大小时会存到内存中,大于这个内存会存到硬盘中,默认为1024 -->
</bean>

3、编写监听器InitApplicationListener.java

在程序启动时,创建一下保存上传文件的文件夹

package com.hx.skyDrive.listener;

import java.io.File;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import com.hx.skyDrive.util.StringUtil;
/**
 * 用来创建该项目文件上传的存放目录
 * @author Huathy
 * @date 2020年3月14日
 */
@WebListener
public class InitApplicationListener implements ServletContextListener {

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
	}

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		String path = "../files";
		
		String temp = sce.getServletContext().getInitParameter("filesPath");
		
		if( !StringUtil.checkNull(temp) ){
			path = temp;
		}
		
		String basePath  = sce.getServletContext().getRealPath("/");
		File fl = new File(basePath + path);
		if( !fl.exists() ){
			fl.mkdirs();
		}
	}
}

4、编写文件上传的控制器FileController.java

package com.hx.skyDrive.controller;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

/**
 * 文件管理类
 * @author Huathy
 * @time 2020年3月23日  下午8:41:45
 */
@RestController
@RequestMapping("/file")
public class FileController {
	
	/**
	 * 文件上传方法
	 * @param fl
	 * @param req
	 * @return
	 */
	@RequestMapping("upload")
	public int upload(@RequestParam("file")MultipartFile fl , HttpServletRequest req) {
		int result = -1;
		if(uid == null || uid<=0){
			return -3;	//未登录
		}
		
		if(fl.isEmpty()){
			return -2;	//请选择需要上传的文件
		}
		
		String fName = fl.getOriginalFilename().trim();
		Long size = fl.getSize();
		
		if(flBiz.isFileExist(fName,size)){
			return -4;	//文件已存在,请勿重复上传
		}
		
		try {
			String savePath = "../files";
			String path = req.getRealPath("");
			String temp = req.getServletContext().getInitParameter("filesPath");
			if( temp!=null && !"".equals(temp) ){	//这里对temp进行判空
				savePath = temp;
			}
			
			savePath += "/" + new Date().getTime() + "-" + fName ;
			
			File dest = new File(path, savePath);
			fl.transferTo(dest);	//将文件上传到服务器
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}	
		return result;
	}	
}

5、前端HTML与JS代码

  1. HTML
<form id="uploadForm">
	<input type="file" name="file" id="file">
	<button type="button" id="fileUploadBtn" class="layui-btn layui-btn-warm">上传资源</button>
</form>
  1. js:
/******** 文件上传的方法 *************************************/
$('#fileUploadBtn').click(function fileUpload(){
	var fl = $('#file')[0].value;
	if( !fl ){
		layer.msg('操作失误,请选择需要上传的文件...');
		return ;
	}
	var formData = new FormData($('#uploadForm')[0]);
	
	var index = layer.load(1, {shade: false}); //显示等待图标。。
	layer.msg('文件上传中...');		//提示
	
	$.ajax({
		type : 'post' ,
		url : 'file/upload' ,
		data : formData ,
		cache : false ,
		processData : false,
		contentType : false,
		success : function(data,status){
			data = parseInt($.trim(data));
			layer.closeAll();	//关闭所有窗口
			if( data > 0 ){
				layer.msg('上传成功😀,待管理员审核...');
				$('#uploadForm')[0].reset();
			}else if( data == -2 ){
				layer.msg('上传失败-请选择需要上传的文件..');
			}else if( data == -3 ){
				layer.msg('请先登录,后再上传文件..');
				setTimeout(function(){
					$('#showLoginBtn').click();
				},800);
			}else if( data == -4 ){
				layer.msg('该文件已存在,请勿重复上传!!');
			}else{
				layer.msg('上传失败😭');
			}
			
		},
		error : function(data,status,e){
			layer.closeAll();	//关闭所有窗口
			layer.alert('上传失败'+e +"\n 本站最大文件上传大小为100M,请检查上传文件大小..");
		}
	});
	return false;
});

终:在tomcat的该项目的上级目录中可以看到已上传的文件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huathy-雨落江南,浮生若梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值