spring多文件上传使用formData

您所在的位置:网站首页 formdata多文件上传 spring多文件上传使用formData

spring多文件上传使用formData

2023-12-18 09:02| 来源: 网络整理| 查看: 265

 

一.spring配置文件上传支持

     

     

     

PS:

CommonsMultipartResolver是spring提供的文件流接收对象,支持多文件上传

3个属性我就不解释了,一看就懂。

 

二.java方法

@ResponseBody

@RequestMapping(value = "/save" , method = RequestMethod.POST)

public ResultDto saveRoute(HttpServletRequest request,RouteInfo routeInfo,

@RequestParam(value = "file",required = false) CommonsMultipartFile[] files,

HttpServletResponse response) {

}

PS:

RouteInfo是我的业务对象,

CommonsMultipartFile要支持多文件上传就在后面加[]

 

三,文件处理

for(MultipartFile multipartFile:multipartFiles){

CommonImgInfo imgModel = new CommonImgInfo();

//文件的原始名称

String originalFilename = multipartFile.getOriginalFilename();

String newFileName = null;

if (multipartFile != null && StringUtils.isNotBlank(originalFilename)){

imgModel.setFileName(originalFilename);

//newFileName = UUID.randomUUID() + originalFilename;

newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."), originalFilename.length());

//存储图片的物理路径

String pic_path = request.getSession().getServletContext().getRealPath(Config.UPLOAD_SAVEPATH);

//获取文件类型

String contentType = multipartFile.getContentType();

//获得文件后缀名称

String imageName = contentType.substring(contentType.indexOf(File.separator) + 1);

File fileParent = new File(pic_path);

if(!fileParent.exists()) {

fileParent.mkdir();

}

imgModel.setMimeType(imageName);

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

String mills = format.format(System.currentTimeMillis());

String path = pic_path + File.separator + mills+ File.separator;

File f = new File(path);

//如果文件夹不存在,创建文件夹

if(!f.exists()) {

f.mkdir();

}

//新图片路径

File targetFile = new File(path, newFileName);

//内存数据读入磁盘

multipartFile.transferTo(targetFile);

String targetPath = File.separator + Config.UPLOAD_SAVEPATH + File.separator + mills + File.separator + newFileName;

imgModel.setLocation(targetPath);

imgModel.setContentSize(multipartFile.getSize());

newFileNames.add(imgModel);

}

 

}

 

ps:

CommonImgInfo是我们专门为文件建立的一个对象,里面的字段有:

原始文件名/新文件名/文件存储路径/文件后缀名/业务类型/业务关联id/文件大小/时间

 

三,前端页面

使用的就是input标签,type为file

选择图片

美化下按钮,这里顺带给样式大家

.inputfile {

opacity: 0;

}

效果:

 

上面每次选定图片后实际是通过js增加的一个img标签,然后有删除x的是通过div写的,也提供给大家吧

x

大家动态去拼接吧。

 

提交使用formData + jquery的ajax,关键代码:

var formData = new FormData(document.getElementById("routeInfoForm"));

if(filesArr.length > 0){

for(var i = 0;i < filesArr.length;i++){

formData.append('file',filesArr[i]);

}

}

 

formData.append('id',vm.id);

formData.append('routeName',vm.routeName);

formData.append('wifiPwd',vm.wifiPwd);

formData.append('routeUserName',vm.routeUserName);

formData.append('routePwd',vm.routePwd);

formData.append('factoryId',vm.manufacturerId);

formData.append('model',vm.model);

formData.append('companyId',vm.companyId);

formData.append('addressDetail',vm.addressDetail);

formData.append('onLineStatus',vm.onLineStatus);

formData.append('factoryName',vm.manufacturers.find(item => item.id === vm.manufacturerId)['name']);

 

ps:

filesArr是我自己定义的数组,存储的就是input的file对象的file。

注意多文件的处理,key是一样的都是file,只是内容不同而已。

其他参数也是通过append添加,忽略这里的vue取值。

到后台spring会自动把这些前台属性注入到对应的业务对象属性,而file则会使用CommonsMultipartFile接收

 

最后是jquery的ajax方法

$.ajax({

type:"post",

url: ctx + "/routeManager/save",

data: formData,

dataType : 'json',

async: false,

cache: false,

contentType: false,

processData: false,

success:function(data){

if(data.status == 0) {

layer.alert('创建成功!', function(){

var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引

parent.layer.close(index);//再执行关闭

});

}else {

layer.msg(data.returnMsg);

}

},error:function(data) {

layer.msg(data.returnMsg);

}

});

 

好了,到这里关键代码基本就都完成了,剩下该你表现了。能帮到大家,希望点个赞



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3