文章目录
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代码
- HTML
<form id="uploadForm">
<input type="file" name="file" id="file">
<button type="button" id="fileUploadBtn" class="layui-btn layui-btn-warm">上传资源</button>
</form>
- 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;
});