写在前面:当初为了实现一个多文件上传可是费了一番功夫,经过我日日夜夜的百度咨询,写了好几种方法,最终还是没能解决问题。我可以很负责任的告诉你,你去百度上不管你形容有多好,只要是涉及多文件,就会查到MultipartFile[] file这个玩意,我也写过了。单文件上传确实只要写MultipartFile file就可以了,那多文件是不是就要涉及到数组呢?我可以告诉你的是,你很幸运的看到了这篇文章。本篇文章使用的是传统的配置资源SSM框架,建议大家用我之前写的文章介绍的springboot整合SSM框架。

需求:SSM框架、mysql数据库、layui技术

整合图:(本图仅仅代表SSM框架整合,其中静态资源最为关键)

关键技术:layui.js、upload.js

代码整合:

注意:在springMvc中需要写入如下代码:

一、首先提供API接口

1、UploadFileController(控制层)

package com.xyyang.controller;

import java.io.File;

import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FilenameUtils;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.multipart.MultipartFile;

import com.xyyang.bean.FileUpload;

import com.xyyang.service.FileService;

@Controller

public class UploadFileController {

@Autowired //注入

private FileService fileService;

//声明接口和方法

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

public /*此处至关重要,一定要返回json字符转格式*/ @ResponseBody String upload(/* 实体类 */FileUpload fileUpload, /* 上传文件 */MultipartFile file,HttpServletRequest request,HttpServletResponse response) throws Exception{

//判断视图层接收到的请求的图片是否不等于0

if(file.getSize()!=0) {

// 使用UUID给图片重命名,并去掉四个"-"

String name = UUID.randomUUID().toString().replaceAll("-", "");

// 获取文件的扩展名

String ext = FilenameUtils.getExtension(file.getOriginalFilename());

// 组合,例如617afc9dc9c64ae18d1b712be1d377bd.png

String newname = name+"."+ext;

//将文件写入本地,切记要使用转运符

file.transferTo(new File("D:\\javacode\\UploadFileSSM\\WebContent\\upload\\" + newname));

//将文件写入数据库

fileUpload.setImg(newname);

}else{

//如果接口请求失败,文件不保存

fileUpload.setImg(null);

}

//视图层调用业务层

fileService.addImg(fileUpload, file, request, response);

//关键,别问这么多,返回0即可。爱秧提供的js已经封装好了返回0

return "0";

}

}

注意:需要自己建立一个upload文件夹,用于存放上传到本地的文件

2、实体类

package com.xyyang.bean;

public class FileUpload {

private Integer id;

private String img;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getImg() {

return img;

}

public void setImg(String img) {

this.img = img;

}

}

3、FileMapper接口

package com.xyyang.mapper;

import com.xyyang.bean.FileUpload;

public interface FileMapper {

Integer addImg(FileUpload fileUpload);

}

4、FileMapper.xml映射

insert into file(img) values( #{img} )

5、FileService接口

package com.xyyang.service;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.multipart.MultipartFile;

import com.xyyang.bean.FileUpload;

public interface FileService {

Integer addImg(FileUpload fileUpload, MultipartFile pictureFile,HttpServletRequest request,HttpServletResponse response) throws Exception;

}

6、FileServiceImpl实现类

package com.xyyang.service;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.web.multipart.MultipartFile;

import com.xyyang.bean.FileUpload;

import com.xyyang.mapper.FileMapper;

@Service

public class FileServiceImpl implements FileService {

@Autowired

private FileMapper fileMapper;

public Integer addImg(FileUpload fileUpload, MultipartFile pictureFile,HttpServletRequest request,HttpServletResponse response) throws Exception{

return fileMapper.addImg(fileUpload);

}

}

二、静态资源加入

1、jsp页面写入静态资源

2、项目导入静态资源,如下图所示

图片:

注意:一定要在js目录下,不然就会出错

三、提供视图页面

注意:下面js代码是上传必须的开头部分,以upload.js为主体,每个js上传方法都必须在它内部

layui.use('upload', function(){

var $ = layui.jquery

,upload = layui.upload;

//写下面提供的js代码内容 });

自动上传单张图片:

1、自动上传效果图

2、自动上传html代码

自动上传单张图片

3、自动上传js代码(multiple: true表示上传多张)

//自动上传单张图片

var uploadInst = upload.render({

elem: '#test1'

,url: '${pageContext.request.contextPath}/upload'

,before: function(obj){

layer.load(); //上传loading

//预读本地文件示例,不支持ie8

obj.preview(function(index, file, result){

$('#demo1').attr('src', result); //图片链接(base64)

$('#demo1').attr('style', 'width: 200px;height: 200px;');//设置宽和高 爱秧推荐在这里设置,不会有歧义

});

}

,done: function(res){

//上传失败

if(res.code > 0){

return layer.msg('上传失败');

}

//上传成功

layer.closeAll('loading'); //关闭loading

layer.msg('恭喜你成功上传1张图片');

}

,error: function(){

//演示失败状态,并实现重传

var demoText = $('#demoText');//自己加的一个id

demoText.html('上传失败 重试');

demoText.find('.demo-reload').on('click', function(){

uploadInst.upload();

});

}

});

选择上传多张图片(不自动。需选择图片后手动点击上传)

1、选择上传多张效果图

2、选择上传html代码

选择图片

开始上传

预览图:

3、选择上传js代码(multiple: false表示上传单张)

//多图片上传

upload.render({

elem: '#test2'

,url: '${pageContext.request.contextPath}/upload'

,multiple: true //允许多文件上传

,auto: false//选择文件后不自动上传

,bindAction: '#test2-zidong'//指向一个按钮触发上传

,before: function(obj){

//预读本地文件示例,不支持ie8

layer.load(); //上传loading

obj.preview(function(index, file, result){

$('#demo2').append('')

});

}

,done: function(res,index){

//上传成功

layer.closeAll('loading')

layer.msg('恭喜你上传成功');

}

});

拖拽上传(不自动。需选择图片后手动点击上传)

1、拖拽上传多张效果图

2、拖拽上传html代码

点击上传,或将文件拖拽到此处

开始上传

3、拖拽上传js代码(multiple: false表示上传单张)

//拖拽上传

upload.render({

elem: '#test10'

,url: '${pageContext.request.contextPath}/upload'

,auto: false

,drag: true

,multiple: true

,bindAction: '#test10-zidong'//指向一个按钮触发上传

,before: function(obj){

layer.load(); //上传loading

}

,done: function(res){

layer.closeAll('loading'); //关闭loading

layer.msg('恭喜你上传成功');

}

});

多文件上传列表(不自动。选择图片后手动上传,可删除,失败可重传)

1、多文件上传列表效果图

选择图片准备

成功

失败

2、多文件上传列表html代码

选择多文件

文件名大小状态操作

开始上传

3、多文件上传列表js代码(multiple: false表示上传单张)

//多文件列表示例

var demoListView = $('#demoList')

,uploadListIns = upload.render({

elem: '#testList'//绑定元素

,url: '${pageContext.request.contextPath}/upload'//上传接口

,accept: 'file'//允许上传的文件类型

,multiple: true

,auto: false

,bindAction: '#testListAction'

,choose: function(obj){

var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列

//读取本地文件

obj.preview(function(index, file, result){

var tr = $(['

'

,'

'+ file.name +''

,'

'+ (file.size/1014).toFixed(1) +'kb'

,'

等待上传'

,'

'

,'重传'

,'删除'

,'

'

,'

'].join(''));

//单个重传

tr.find('.demo-reload').on('click', function(){

obj.upload(index, file);

});

//删除

tr.find('.demo-delete').on('click', function(){

delete files[index]; //删除对应的文件

tr.remove();

uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选

});

demoListView.append(tr);

});

}

,done: function(res, index, upload){

if(res.code != 0){ //上传成功

var tr = demoListView.find('tr#upload-'+ index)

,tds = tr.children();

tds.eq(2).html('上传成功');

tds.eq(3).html('已成功,无须操作。再次添加新的图片时不会再重复上传'); //清空操作

return delete this.files[index]; //删除文件队列已经上传成功的文件

}

this.error(index, upload);

}

,error: function(index, upload){

var tr = demoListView.find('tr#upload-'+ index)

,tds = tr.children();

tds.eq(2).html('上传失败');

tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传

}

});

四、参数讲解(爱秧只讲解10点)

1、elem:指向容器选择器,如:elem: '#id'。也可以是DOM对象

2、url:服务端上传接口,后端需返回json字符串

3、size:设置文件最大可允许上传的大小,单位 KB。

4、exts:允许上传的文件后缀。一般结合accept参数类设定。假设 accept 为 file 类型时,那么你设置exts: 'zip|rar|7z'即代表只允许上传压缩格式的文件。如果 accept 未设定,那么限制的就是图片的文件格式

5、accept:指定允许上传时校验的文件类型,可选值有:images(图片)、file(所有文件)、video(视频)、audio(音频)

6、mutiple:是否允许多文件上传。设置true即可开启。

7、auto:是否选完文件后自动上传。如果设定false,那么需要设置bindAction参数来指向一个其它按钮提交上传

8、bindAction:指向一个按钮触发上传,一般配合 auto: false 来使用。值为选择器或DOM对象,如:bindAction: '#btn'

9、before:文件提交上传前的回调

10、done:执行上传请求后的回调。返回三个参数,分别为:res(服务端响应信息)、index(当前文件的索引)、upload(重新上传的方法,一般在文件上传失败后使用)。

版权声明:若无特殊注明,本文皆为《

爱秧 》原创,转载请保留文章出处。

本文链接:基于SSM框架、Layui的多文件上传、包括图片,压缩包,音频等文件(与数据库挂钩) https://42xyyang.top/post-49.html

正文到此结束

layui实现文件压缩上传_基于SSM框架、Layui的多文件上传、包括图片,压缩包,音频等文件(与数据库挂钩) - 爱秧博客...相关推荐

  1. 基于SSM框架的个性化眼镜线上销售系统+论文第三稿+已降重+包安装配置

    项目名称 基于SSM框架的个性化眼镜线上销售系统 视频效果 基于SSM框架的个性化眼镜线上销售系统 项目地址: https://download.csdn.net/download/m0_721809 ...

  2. ssm框架验证码图片加载不出_基于SSM框架的文件图片上传/下载功能实现

    前一段时间很多做毕业设计的同学问:如何写图片和文件的上传下载功能,今天正好有时间,所以就做了一个案例,详细的讲解这个功能. 框架结构: 对于很多做过开发的而言,上传功能肯定都用过,而且用到的场景很多, ...

  3. Java毕业设计_基于SSM框架的图片素材管理系统的设计与实现

    基于SSM框架的图片素材管理系统的设计与实现 基于SSM框架的图片素材管理系统的设计与实现mysql数据库创建语句 基于SSM框架的图片素材管理系统的设计与实现oracle数据库创建语句 基于SSM框 ...

  4. 实训代码java毕业设计_基于SSM框架的王者荣耀游戏攻略系统

    基于SSM框架的王者荣耀游戏攻略系统mysql数据库创建语句 基于SSM框架的王者荣耀游戏攻略系统oracle数据库创建语句 基于SSM框架的王者荣耀游戏攻略系统sqlserver数据库创建语句 基于 ...

  5. python post上传大文件分片上传_基于七牛 用python实现分片上传 创建文件报错701...

    创建文件时出错: 701 Unknown {"error":"block 0: yonginvalid context"} 抓包结果: POST /mkfile ...

  6. java报价系统_基于SSM框架下的JAVA产品报价系统

    每天记录学习,每天会有好心情.*^_^* 今天和一个朋友共同完成了一个产品报价系统项目,我们在开发时选用的框架是SSM(MYECLIPSE)框架.我这个朋友知识有限,只会这个框架,哈哈,都是为了方便他 ...

  7. java银行自助系统结构图_基于SSM框架的JAVA银行大厅自助信息系统

    每天记录学习,每天会有好心情.*^_^* 今日思考,完成一个银行大厅自助信息系统项目,需要实现哪些功能? 此类项目常见描述如下: 伴随着计算机应用科学和互联网日新月异的发展,信息的掌握和分析已成为现代 ...

  8. java交易系统_基于SSM框架的JAVA二手交易系统

    最近了解了二手交易系统项目,在这个平台记录一下这个二手交易系统项目,方便以后再次使用或学习的时候能够及时的翻阅.在完成这个项目的时候,考虑了很多框架.最终决定选用SSM(MYECLIPSE),该框架具 ...

  9. java商城管理系统_基于SSM框架的JAVA商场管理系统

    每天记录学习,每天会有好心情.*^_^* 今天记录的项目是商场管理系统,这个项目是这么回事:随着人们对手机的需求日益增多,手机卖场的规模也随之扩大.众多手机卖场为了能够高效的运作,获得更大的收益,逐步 ...

最新文章

  1. PHP安全: 一个新型的php一句话cmdshell
  2. A free SSH client - putty[]
  3. java ui调试_如何使用 IBM i System Debugger 调试 Java 程序
  4. centos7 安装图形界面、VNCserver
  5. Oracle 原理:逻辑备份和恢复
  6. 华为上机试题:最高分是多少
  7. python tkinter控件_python GUI作业:使用tkinter的重要控件
  8. yum update Transaction Check Error
  9. Silverlight Blend动画设计系列八:拖放(Drag-Drop)操作与拖放行为(DragBehavior)
  10. Flink 端到端一致性
  11. 保存网站快捷方式到桌面的php代码,转的一个朋友的了,加了点判断
  12. 在线分数加减乘除计算器
  13. socket编程(三)
  14. 请求示例代码_新版云效:代码托管初体验
  15. word文档删除空白页,选中空白页面按住 delete
  16. 【科研人必备】各大英文期刊投稿必备搜索/文章相关推荐投稿搜索方法
  17. java 实现 excel normsdist_Excel实现的NORM NORMDIST函数中的幻数
  18. 数据库中update怎么用事例_Oracle的update语句set里使用子查询的例子解释
  19. vlookup多项匹配_VLOOKUP函数一对多查找,就是这么简单!
  20. linux notepadqq不支持中文输入的原因分析

热门文章

  1. Android 基于Socket的聊天室
  2. 2021年施工员-土建方向-岗位技能(施工员)免费试题及施工员-土建方向-岗位技能(施工员)考试总结
  3. python数学建模(二)线性规划2.实战(思路清晰\过程完整、详细)
  4. Deep Learning for Single Image Super-Resolution: A Brief Review SISR综述分析
  5. 二进制安全之NX绕过方法--ROP技术
  6. android studio导入动态库,OPE体育官方网站-OPE体育官方网站
  7. 安居客无锡二手房数据获取
  8. 郭台铭资产对比马云谁更有钱?两人身价多少亿
  9. python入门系列:包和模块
  10. JVM参数 之 -XX:MaxGCPauseMillis 与 -XX:GCTimeRatio