MultipartFile文件上传 多文件上传 接受js文件

本次带来的是MultipartFile多文件文件上传,可以在sql执行完成,没有出现异常,再将文件保存进我们的服务器,如果出现异常,文件不会上传到我们的服务器

上传图片工具类


import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.math.RandomUtils;
import org.springframework.web.multipart.MultipartFile;

public class FileLoad {
	public static Map load(HttpServletRequest request, HttpServletResponse response, MultipartFile[] file) {
		// map 储存MultipartFile[]文件数组 File类上传路径及数组 上传路径及名称(将其保存进数据库)
		Map map = new HashMap();
		// 上传文件名加路径
		List<String> listFilePath = new ArrayList<String>();
		// File提供路径及文件名
		List<File> listFile = new ArrayList<File>();
		// 定义存储路径
		String filePath = request.getServletContext().getRealPath("/file");
		System.err.println("上传路径是:" + filePath);
		// 设置文件上传大小为50MB
		int fileSize = 50000000;
		// 最终要保存的文件名称
		String loadfileName = "";
		// 文件后缀
		String suffix;
		// 判断文件数组是否为空
		if (file != null) {
			// 计算一次文件累加不饿能超过50MB
			long fs = 0;
			for (int i = 0; i < file.length; i++) {
				fs += file[i].getSize();// 文件大小累加
			}
			System.out.println(fs);
			// 判断文件累加不能超过50MB
			if (fs < fileSize) {
				for (int i = 0; i < file.length; i++) {
					// 判断是否上传真文件 利用上传文件名字是否等于空字符 可能会出现假文件
					if (file[i].getOriginalFilename() != "" && file[i].getOriginalFilename() != null) {
						// 获取用户上传文件名
						String oldfileName = file[i].getOriginalFilename();
						// 使用工具类FilenameUtils 截取原始文件名的后缀
						suffix = FilenameUtils.getExtensionName(oldfileName);
						System.out.println("原文件名:" + oldfileName);
						System.out.println("后缀:" + suffix);
						// 判断文件名后缀是否等于 gif,jpg,jpeg,bmp,png
						if (suffix.equals("gif") || suffix.equals("jpg") || suffix.equals("jpeg")
								|| suffix.equals("bmp") || suffix.equals("png")) {
							// 生成上传文件名,当前时间加随机数
							String fileName = System.currentTimeMillis() + RandomUtils.nextInt(1000000) + "." + suffix;
							// 要上传的路径和文件名
							File targetFile = new File(filePath, fileName);
							if (!targetFile.exists()) {
								targetFile.mkdirs();
							}
							try {
								// 不在这里执行文件保存
								// file[i].transferTo(targetFile);
								// loadfileName=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/kuangjia/loadImg/"+fileName;
								loadfileName = filePath + File.separator + fileName;// 本地路径,上边的是服务器路径
								listFile.add(targetFile);
								listFilePath.add(loadfileName);
								System.err.println("最后上传的路径:(保存到数据库的路径)" + loadfileName);
							} catch (Exception e) {
								e.printStackTrace();
								request.setAttribute("fileError", "文件上传失败");
								System.err.println("文件保存异常");
							}
						} else {
							request.setAttribute("fileError", "文件上传类型不符");
						}
					} else {
						System.out.println("出现假文件,将假文件从内存清理掉");
						file = clearFile(i, file);
					}
				}
			} else {
				request.setAttribute("fileError", "上传文件总数大于50MB");
			}
		}
		map.put("FilePath", listFilePath);
		map.put("File", listFile);
		map.put("MultipartFile", file);
		return map;
	}

	// 清理假文件
	public static MultipartFile[] clearFile(int index, MultipartFile[] file) {
		MultipartFile[] fileNew = new MultipartFile[file.length - 1];
		for (int i = index; i < file.length; i++) {
			file[i] = file[i + 1];
		}
		System.arraycopy(file, 0, fileNew, 0, file.length);
		return fileNew;
	}

}

获取文件名后缀工具类

public class FilenameUtils {
	public static String getExtensionName(String filename) {
		if ((filename != null) && (filename.length() > 0)) {
			int dot = filename.lastIndexOf('.');
			if ((dot > -1) && (dot < (filename.length() - 1))) {
				return filename.substring(dot + 1);
			}
		}
		return filename;
	}
}

控制器代码:
将文件提交进去不会马上保存,可以执行完sql再进行保存

public void webupload(HttpServletRequest request, HttpServletResponse response, MultipartFile[] fileimg) {
		Map map = FileLoad.load(request, response, fileimg);
		List<String> listpath = (List)map.get("FilePath");
		List<File> listFile = (List)map.get("File");
		MultipartFile[] file = (MultipartFile[])map.get("MultipartFile");
		
		/*
		 * 我假装在这里执行了sql
		 */
		
		//判断保存数据条数是否正常   如果sql执行没有问题    再将文件存储在服务器
		for(int i = 0; i < listFile.size(); i++) {
			try {
				file[i].transferTo(listFile.get(i));
			}catch (Exception e) {
				System.out.println("文件保存异常");
				request.setAttribute("fileError", "文件保存异常");
			}
		}
		System.out.println("保存完毕");
	}

以下是一个webupload上传demo,可以体验一下
https://download.csdn.net/download/qq_43510878/10850082
MultipartFile文件上传 多文件上传 接受js文件

MultipartFile文件上传 多文件上传 接受js文件

MultipartFile文件上传 多文件上传 接受js文件