ssm文件上传下载比较详细的案例
背景:ssm框架
接下来,我会介绍单文件上传,下载,多文件的上传,下载,使用ajax进行文件的上传下载,和普通的表单提交的文件上传下载。
只要做项目,总是少不了文件的操作,好了废话不多说,直接上代码!
前提:需要在springmvc的配置文件里面加一个文件解析器,这个必须要有!!!
<!-- 定义文件解释器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置默认编码 -->
<property name="defaultEncoding" value="utf-8"></property>
<!-- 上传图片最大大小5M-->
<property name="maxUploadSize" value="5242440"></property>
</bean>
随便提下:需要的jar包,我项目使用的maven构建,直接添加的依赖,jar包是下面两个:
commons-fileupload-1.3.2.jar
commons-io-2.2.jar
一、单文件的文件上传、下载
上传:前台
<form id ="form2" action="load/upload2" enctype="multipart/form-data" method="post">
<input type = "file" name= 'file' />
<input type="text" name="name" value="dzf"/>
<input type="button" id = "button2" value="ajax上传" onclick="fileupload2()">
<input type ="submit" value="直接上传">
</form>
function fileupload2(){
var formData = new FormData($("#form2")[0]);
$.ajax({
url:'load/upload2',
type:'post',
data:formData,
//必须false才会自动加上正确的Content-Type
contentType: false,
//必须false才会避开jQuery对 formdata 的默认处理
//XMLHttpRequest会对 formdata 进行正确的处理
processData: false,
success:function(data){
alert(data);
},
error:function(data){
alert(data);
alert("后台发生异常");
},
cache:false,
async:true
});
}
后台:
/**
* 单个文件上传
* @param request
* @return
*/
@RequestMapping(value="/upload2",produces="text/html;charset=utf-8")
@ResponseBody
private String upload2(@RequestParam("file")CommonsMultipartFile partFile,HttpServletRequest request) {
try {
String path = request.getServletContext().getRealPath("/upload");
String name = request.getParameter("name");
log.info("其他的参数{}",name);
log.info("upload2---------------start---------------------");
log.info("这个临时文件的路径是[{}]", path);
String filename = partFile.getOriginalFilename();
log.info("文件的名字:{}",filename);
File file = new File(path+"/"+filename);
InputStream inputStream = partFile.getInputStream();
FileUtils.copyInputStreamToFile(inputStream, file);
if(inputStream!=null){
inputStream.close();
}
return "文件上传成功!";
} catch (Exception e) {
e.printStackTrace();
return "文件上传失败!";
}
}
下载:前台
<form action="load/down1" name="form3" id = "form3" method="post">
<input type = "submit" value="普通文件下载">
</form>
后台:
/**
* 文件下载
* 单个文件下载
* @param request
* @return
* @throws IOException
*/
@RequestMapping("/down1")
private void down(HttpServletRequest request,HttpServletResponse response) throws IOException {
String path = request.getServletContext().getRealPath("/upload");
File file = new File(path);
File[] files = file.listFiles();
String name = files[0].getName();//随机获取一个文件,实际中按需编写代码
System.out.println("文件的名字:"+name);
response.addHeader("content-disposition", "attachment;filename="+name);
FileUtils.copyFile(files[0], response.getOutputStream());
}
二、多文件的上传和下载
上传-前台:
<form id ="form5" action="load/upload3" enctype="multipart/form-data" method="post">
<input type = "file" name= 'file' />
<input type = "file" name= 'file' />
<input type = "file" name= 'file' />
<input type="text" name="name" value="dzf"/>
<input type="button" id = "button2" value="多文件ajax上传" onclick="fileupload3()">
<input type ="submit" value="多文件直接上传">
</form>
function fileupload3(){
var formData = new FormData($("#form5")[0]);
$.ajax({
url:'load/upload3',
type:'post',
data:formData,
//必须false才会自动加上正确的Content-Type
contentType: false,
//必须false才会避开jQuery对 formdata 的默认处理
//XMLHttpRequest会对 formdata 进行正确的处理
processData: false,
success:function(data){
alert(data);
},
error:function(data){
alert(data);
alert("后台发生异常");
},
cache:false,
async:true
});
}
上传-后台:
/**
* 多个文件上载
* @param request
* @return
*/
@RequestMapping(value="/upload3",produces="text/html;charset=utf-8")
@ResponseBody
private String upload3(@RequestParam("file")CommonsMultipartFile[] partFiles,HttpServletRequest request) {
InputStream inputStream = null;
try {
String path = request.getServletContext().getRealPath("/upload");
String name = request.getParameter("name");
log.info("其他的参数{}",name);
log.info("upload2---------------start---------------------");
log.info("这个临时文件的路径是[{}]", path);
for (int i = 0; i < partFiles.length; i++) {
String filename = partFiles[i].getOriginalFilename();
log.info("文件的名字:{}",filename);
File file = new File(path+"/"+filename);
inputStream = partFiles[i].getInputStream();
FileUtils.copyInputStreamToFile(inputStream, file);
}
if(inputStream!=null){
inputStream.close();
}
return "文件上传成功!";
} catch (Exception e) {
e.printStackTrace();
return "文件上传失败!";
}
}
一次性下载多个文件,我们需要把文件放到一个压缩包里去
下载-前台:
<form action="load/down2" name="form4" id = "form4" method="post">
<input type = "submit" value="压缩文件下载">
</form>
下载-后台:
/**
* 文件下载,一下次下载多个文件
* 思路:先将多个文件压缩到一个压缩包里去,然后传到前台
* @param request
* @return
* @throws IOException
*/
@RequestMapping("/down2")
private void down2(HttpServletRequest request,HttpServletResponse response) throws IOException {
String path = request.getServletContext().getRealPath("/upload");
File file = new File(path);
File[] files = file.listFiles();
File zipFile =new File("test.zip");
if(!zipFile.exists()){
zipFile.createNewFile();
}
String zipName = zipFile.getName();
log.info("压缩文件的名字:{}",zipName);
response.addHeader("Content-Disposition", "attachment;filename="+zipName);
//定义输出类型
// response.setContentType("application/zip");
ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(zipFile));
BufferedInputStream in =null;
log.info("文件的个数{}",files.length);
for(int i = 0;i<files.length;i++){
String name = files[i].getName();
System.out.println("文件的名字:"+name);
ZipEntry zipEntry = new ZipEntry(name);
zip.putNextEntry(zipEntry);
in = new BufferedInputStream(new FileInputStream(files[i]));
int len = 0;
byte [] btyes = new byte[1024*4];
while((len=in.read(btyes))!=-1){
zip.write(btyes, 0, len);
}
}
zip.flush();
zip.close();
in.close();
FileUtils.copyFile(zipFile, response.getOutputStream());
if(zipFile.exists()){
if(zipFile.delete()){
log.info("压缩包删成功!!");
}else{
log.info("压缩包产出失败!!");
} }
}
到此,文件的上传、下载实例代码已经全部结束!
ssm文件上传下载比较详细的案例的更多相关文章
- springmvc文件上传下载简单实现案例(ssm框架使用)
springmvc文件上传下载实现起来非常简单,此springmvc上传下载案例适合已经搭建好的ssm框架(spring+springmvc+mybatis)使用,ssm框架项目的搭建我相信你们已经搭 ...
- JAVA Web 之 struts2文件上传下载演示(二)(转)
JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...
- nodejs+express-实现文件上传下载管理的网站
Nodejs+Express-实现文件上传下载管理的网站 项目Github地址(对你有帮助记得给星哟):https://github.com/qcer/updo 后端:基于nodejs的express ...
- Java实现FTP批量大文件上传下载篇1
本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量.大文件的上传下载控件.文章在比较了一系列FTP客户库的基础上,就其中一个比 ...
- java实现文件上传下载
喜欢的朋友可以关注下,粉丝也缺. 今天发现已经有很久没有给大家分享一篇技术文章了,于是想了一下给大家分享一篇java实现文件上传下载功能的文章,不喜欢的希望大家勿喷. 想必大家都知道文件的上传前端页面 ...
- SSM文件上传
**自己对于SSM文件上传的一些心得** 刚开始的时候也是在网上寻找一些简单的案例,可能我的这篇文章不是最好的,但是这些都是我自己慢慢的摸索以及自己的尝试的一些心得,希望对各位有所帮助. 其实文件的上 ...
- react-native之文件上传下载
目录 文件上传 1.文件选择 2.文件上传 1.FormData对象包装 2.上传示例 文件下载 最近react-native项目上需要做文件上传下载的功能,由于才接触react-native不久,好 ...
- SSM整合 上传下载之添加商品
上传下载细节: 导入xml配置文件!! Controller中要配置存储路径,调用transferto上传文件 上传图片 要将图片的类设置为 MultipartFile 图片下载: 源码: 页面展示: ...
- Struts的文件上传下载
Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...
随机推荐
- GDB调试,转载一位大牛的东西
http://www.wuzesheng.com/?p=1327 手把手教你玩转GDB(一)——牛刀小试:启动GDB开始调试 写在最前面:GDB是unix相关操作系统中C/C++程序开发必不可少的工具 ...
- c#实现一个打砖块游戏step by step---开篇
一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 二 游戏截图与说明 1. 游戏截图 2. 游戏说明: 蓝色砖块砖块为普通 ...
- 一张图玩转H5测试
背景 随着各种H5页面的普及和运用,并深深的影响着我们各个业务的发展,前两年也对H5测试的有着不少积累,但都是根据项目的要求,这里测试下,那里测试下,今年上半年专门成立了H5测试研究虚拟小组,专门研究 ...
- 【BZOJ4817】[Sdoi2017]树点涂色 LCT+线段树
[BZOJ4817][Sdoi2017]树点涂色 Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路径的权值是:这条路 ...
- 【BZOJ2238】Mst 最小生成树+LCA+堆
[BZOJ2238]Mst Description 给出一个N个点M条边的无向带权图,以及Q个询问,每次询问在图中删掉一条边后图的最小生成树.(各询问间独立,每次询问不对之后的询问产生影响,即被删掉的 ...
- jPage.js分页
jPage.js插件使用文档 这一款插件主要是为了bootstrap原生的分页功能效果不理想而诞生的一款插件. jPage.js代码更新地址为:https://github.com/leslieSie ...
- springboot集成h2
h2数据库是常用的开源数据库,与HSQLDB类似,十分适合作为嵌入式数据库使用,其他的数据库大部分都需要安装独立的客户端和服务器端 h2的优势: (1)h2采用纯java编写,因此不受平台的限制 (2 ...
- python面试题(五)
1 谈谈你对面向对象的理解? 面向对象的编程---object oriented programming,简称:OOP,是一种编程的思想.OOP把对象当成一个程序的基本单元,一个对象包含了数据和操作数 ...
- android自定义控件(三)ProgressBar
1.ProgressBar有两个进度,一个是android:progress,另一个是android:secondaryProgress.比如视频的缓存进度以及播放进度. 在这里缓存的进度就可以是a ...
- 0403-服务注册与发现-客户端负载均衡-Ribbon的基本使用
一.概述 问题1.上一篇文章已说明如何注册微服务,但是调用方如何调用,以及如何防止硬编码.即电影微服务调用用户微服务 问题2.用户微服务多个节点,调用服务方如何负载均衡 二.实现负载均衡方式 2.1. ...