背景: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文件上传下载比较详细的案例的更多相关文章

  1. springmvc文件上传下载简单实现案例(ssm框架使用)

    springmvc文件上传下载实现起来非常简单,此springmvc上传下载案例适合已经搭建好的ssm框架(spring+springmvc+mybatis)使用,ssm框架项目的搭建我相信你们已经搭 ...

  2. JAVA Web 之 struts2文件上传下载演示(二)(转)

    JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...

  3. nodejs+express-实现文件上传下载管理的网站

    Nodejs+Express-实现文件上传下载管理的网站 项目Github地址(对你有帮助记得给星哟):https://github.com/qcer/updo 后端:基于nodejs的express ...

  4. Java实现FTP批量大文件上传下载篇1

    本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量.大文件的上传下载控件.文章在比较了一系列FTP客户库的基础上,就其中一个比 ...

  5. java实现文件上传下载

    喜欢的朋友可以关注下,粉丝也缺. 今天发现已经有很久没有给大家分享一篇技术文章了,于是想了一下给大家分享一篇java实现文件上传下载功能的文章,不喜欢的希望大家勿喷. 想必大家都知道文件的上传前端页面 ...

  6. SSM文件上传

    **自己对于SSM文件上传的一些心得** 刚开始的时候也是在网上寻找一些简单的案例,可能我的这篇文章不是最好的,但是这些都是我自己慢慢的摸索以及自己的尝试的一些心得,希望对各位有所帮助. 其实文件的上 ...

  7. react-native之文件上传下载

    目录 文件上传 1.文件选择 2.文件上传 1.FormData对象包装 2.上传示例 文件下载 最近react-native项目上需要做文件上传下载的功能,由于才接触react-native不久,好 ...

  8. SSM整合 上传下载之添加商品

    上传下载细节: 导入xml配置文件!! Controller中要配置存储路径,调用transferto上传文件 上传图片 要将图片的类设置为 MultipartFile 图片下载: 源码: 页面展示: ...

  9. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...

随机推荐

  1. PHP基础面试题(1-10)

    1.什么是PHP? PHP是一个基于服务端来创建动态网站的脚本语言,可以通过PHP和HTML 生成网站主页. 2.什么是面向对象?主要特征是什么? 面向对象是程序的一种设计方式,利于提高程序的重用性, ...

  2. PMP杂谈--项目组织,矩阵组织,职能型组织,复合型组织

    (1)项目组织的优缺点:优:项目经理权力大:缺:解散时焦虑.没有提拔权力,不利于专业技术积累,设备反复.难以保证资源的充分利用. (2)矩阵组织的优缺点:优:资源利用率高,横向信息沟通.项目经理权力提 ...

  3. jqgrid动态添加rowlist

    function changePager(){     var pagerCenter =$('#grid-pager_center');//获取td     pagerCenter.find('se ...

  4. Python抓取网页并保存为PDF

    https://blog.csdn.net/shenwanjiang111/article/details/67634794

  5. poj2528

    Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 56864   Accepted: 16445 ...

  6. 关于angularjs的select下拉列表存在空白的解决办法

    angularjs 的select的option是通过循环造成的,循环的方式可能有ng-option或者</option  ng-repeat></option>option中 ...

  7. 将电脑中编写的app网页放到手机上访问

    http://jingyan.baidu.com/article/3065b3b6e5becdbecff8a4d5.html 1.在控制面板-管理工具找不到IIS,则先在程序-打开或关闭window功 ...

  8. 关于“Cannot find any provider supporting AES/ECB/PKCS7Padding”问题的解决方案

    出现这个问题的原因是:java自带的是PKCS5Padding填充,不支持PKCS7Padding填充 参考:https://stackoverflow.com/questions/20770072/ ...

  9. java switch case 枚举类型的反编译结果

     package com.example.demo; import java.io.PrintStream;  // Referenced classes of package com.example ...

  10. vim常规操作

    原文地址 三种模式 一般模式:可以进行复制.粘贴和删除等操作 编辑模式:按i或a进入编辑模式,按Esc回到一般模式 命令模式:按/或?或:进入命令模式,按Esc回到一般模式 移动操作 h j k l: ...