版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27047215/article/details/78457183
底层工具类【UpFileUtil 】
import com.alibaba.fastjson.JSON;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
/**
* 说明:多图片多文件上传
*/
@Component
public class UpFileUtil {
/**
* 多图片多文件上传
* @param file 图片及文件的集合
* @param request 由Controller带回HttpRequest对象
* @param filePath 文件的上传根路径
* @return
*/
public String uploadPictureList(MultipartFile[] file,
HttpServletRequest request,
String filePath){
File targetFile=null;
List imgList=new ArrayList();
if (file!=null && file.length>0) {
for (int i = 0; i < file.length; i++) {
String fileName=file[i].getOriginalFilename();
if(fileName!=null&&fileName!=""){
//获取文件后缀名称
String fileF = fileName.substring(fileName.lastIndexOf("."), fileName.length());
//生成新的文件名称
fileName=new Date().getTime()+"_"+new Random().nextInt(1000)+fileF;
//存储文件夹设置 根据项目情况可进行调配
//……待优化部分Loading
String fileAdd = DateUtil.getDays();
if(fileF.equals("jpg")||fileF.equals("png")||
fileF.equals("jpeg")||fileF.equals("gif")){
fileAdd = fileAdd + File.separator + "imgFile";
}
if(fileF.equals("doc")||fileF.equals("docx")||
fileF.equals("zip")||fileF.equals("xls")
||fileF.equals("xlsx")||fileF.equals("7z")){
fileAdd = fileAdd + File.separator + "docFile";
}
//存储文件(判断文件夹及文件名称是否已经存在)
File file1 =new File(filePath);
if(!file1 .exists() && !file1 .isDirectory()){
file1 .mkdir();
}
targetFile = new File(file1, fileName);
try {
file[i].transferTo(targetFile);
imgList.add(fileAdd + File.separator +fileName);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
//只需要单文件或图片时,优化存储json数据[简化前台对单文件获取的操作]
if(file.length == 1){
return JSON.toJSONString(imgList.get(0));
}else{
return JSON.toJSONString(imgList);
}
}
}
Controller调用方式
//图片处理
String ffile = DateUtil.getDays(), fileName = "";
if (null != customer_head_portrait && customer_head_portrait.length != 0) {
String filePath = PathUtil.getClasspath()+ Const.FILEPATHFILE + ffile;
**item.setCustomerHeadPortrait(upFileUtil.uploadPictureList(customer_head_portrait,request,filePath));**
}else{
item.setCustomerHeadPortrait("");
}
PathUtil处理类
public class PathUtil {
/**
* 获取项目根目录
* @return
*/
public static String getClasspath(){
String path = (String.valueOf(Thread.currentThread().getContextClassLoader().getResource(""))+"../../").replaceAll("file:/", "").replaceAll("%20", " ").trim();
if(path.indexOf(":") != 1){
path = File.separator + path;
}
return path;
}
}
Const配置类
/**
*根据实际情况 可以省略
**/
public class Const {
public static final String FILEPATHFILE = "uploadFiles/file/"; //文件上传路径
}
前端使用【表单提交测试】
<form action="http://localhost/customer_basics/new" method="post" enctype="multipart/form-data" >
<input type="text" name="customer_name" value="测试用户"/>
<input type="file" name="customer_head_portrait" accept="image/jpg,image/jpeg,image/png,image/bmp" **multiple**/><!--如不需要多图片多文件 则去掉multiple即可-->
<input type="submit" value="Submit" />
</form>
前端使用【Js】
$.ajaxFileUpload({
url:"",//调用的服务请求URL
secureuri:false,
fileElementId:"", //获取的上传文件框(input File)属性ID
dataType: 'json', //数据格式
contentType: false, //文件拓展名类型
processData: false, //是否需要对数据进行序列化
success: function (data){
if(data!=null){
//上传成功后的处理
alert("上传成功");
}else{
alert("上传失败");
}
},
error:function(XMLHttpRequest, textStatus, errorThrown){
alert("上传失败");
}
});
}
}
底层部分还有些需要优化的地方,在优化测试完成后,我会更新本文,谢谢大家支持~~~