最近在做一个ssm的项目,遇到了添加附件和下载的功能,在网上查了很多资料,发现很多都不好用,经过摸索,发现了一套简便的方法,和大家分享一下。

1.在自己已经构建好的maven  web项目中 pom.xml配置文件中添加上传下载所需要的jar包

        <dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>

2.在spring的applicationContext.xml配置文件中添加文件上传解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="5242440"></property>
</bean>

3.文件上传
前台页面使用了easyui,代码如下:

<table>
<tr>
<td>附件</td>
<td>
<input class="easyui-filebox" type="file" name="file1" id="file1"><a href="javascript:imageUpload()" class="easyui-linkbutton">上传</a>
</td>
<td>
<input type="hidden" id="ssFile" name="ssFile"> <!--用于文件名回显-->
</td>
</tr>
</table>

JS方法调用后台:

function imageUpload(){
var file1 = document.getElementById("file1");
var ssFile = document.getElementById("ssFile");
ssFile.value = file1.value.substring(12); //取出文件名,并赋值回显到文本框,用于向后台传文件名
$.ajaxFileUpload({
url : '${pageContext.request.contextPath}/bug/uploadFile.do', //用于文件上传的服务器端请求地址
fileElementId : 'file1', //文件上传空间的id属性 <input type="file" id="file" name="file" />
type : 'post',
dataType : 'text', //返回值类型 一般设置为json
success : function(data, status) //服务器成功响应处理函数
{
alert("文件上传成功"); },
error : function(data, status, e)//服务器响应失败处理函数
{
alert("文件上传失败"); }
});
}

  后台实现:

@RequestMapping(value="/uploadFile.do" ,produces="text/html;charset=utf-8" )
public @ResponseBody String importPicFile1(
@RequestParam MultipartFile file1,HttpServletRequest request){ Map<String,Object> map= new HashMap<String,Object>();
if(file1.isEmpty()){
map.put( "result", "error");
map.put( "msg", "上传文件不能为空" );
} else{
String originalFilename=file1.getOriginalFilename();
String fileBaseName=FilenameUtils.getBaseName(originalFilename);
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String floderName=fileBaseName+"_" +df.format(now);
try{
//创建要上传的路径
File fdir = new File("D:/file");
if (!fdir.exists()) {
fdir.mkdirs();
}
//文件上传到路径下
FileUtils. copyInputStreamToFile(file1.getInputStream(), new File(fdir,originalFilename));
//coding
map.put( "result", "success"); } catch (Exception e) {
map.put( "result", "error");
map.put( "msg",e.getMessage()); }
}

4.文件下载

前台页面:

<table>
<tr>
<td>附件</td>
<td><a href="" id="ssUrl" class="easyui-linkbutton">下载</a>
</td>
</tr>
</table>

JS方法:

$("#ssUrl").attr('href',"${pageContext.request.contextPath}/bug/download?filename="+fileName) //将后台的路径和文件名赋值给a标签 fileName需要自己从数据库中查出 

后台方法:

/**
* 文件下载
* @throws IOException
*/
@RequestMapping(value="/download",method=RequestMethod.GET)
public void download(@RequestParam(value="filename")String filename,
HttpServletRequest request,
HttpServletResponse response) throws IOException {
//模拟文件,myfile.txt为需要下载的文件
String path = "D:\\file"+"\\"+filename;
//获取输入流
InputStream bis = new BufferedInputStream(new FileInputStream(new File(path)));
//转码,免得文件名中文乱码
filename = URLEncoder.encode(filename,"UTF-8");
//设置文件下载头
response.addHeader("Content-Disposition", "attachment;filename=" + filename);
//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
response.setContentType("multipart/form-data");
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
int len = 0;
while((len = bis.read()) != -1){
out.write(len);
out.flush();
}
out.close();
}

  本人亲测可用,大家有什么意见可以交流,第一次写博客,如有疏漏,请多多指教!

ssm框架下的文件上传和文件下载的更多相关文章

  1. ssm框架下实现文件上传

      1.由于ssm框架是使用Maven进行管理的,文件上传所需要的jar包利用pom.xml进行添加,如下所示: <properties> <commons-fileupload.v ...

  2. Struts2框架下的文件上传文件类型、名称约定

    Struts2框架下的文件上传机制:1.通过multipart/form-data form提交文件到服务器2.文件名是通过什么地方设置的?在strust2的FileUploadInterceptor ...

  3. SSM框架-SpringMVC 实例文件上传下载

    一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+sta ...

  4. 第一零四天上课 PHP TP框架下的文件上传

    控制器代码(TestController.class.php) <?php namespace Home\Controller; use Home\Controller\EmptyControl ...

  5. RPC框架下实现文件上传到linux服务器

    一.前端使用element -ui 的upload组件 :data 表示额外传递的参数, :header 表示设置请求头参数,如,token等, action表示后台api接口的地址 二. conto ...

  6. 一个tornado框架下的文件上传案例

    html部分----使用了form表单,注意三要素 method="post"  action="/loaddata" enctype="multip ...

  7. centos 6.5下安装文件上传下载服务

    centos 6.5下安装文件上传下载服务 由于每次在CentOS中要下载一些配置文件到物理机,和上传一些文件到服务器,导致来回的开启ftp软件有点麻烦,这里我们可以使用文件上传下载服务,来解决上传和 ...

  8. linux下将文件上传到svn服务器

    linux下将文件上传到svn服务器 摘自:https://blog.csdn.net/sky_yangge/article/details/41544773 2014年11月27日 16:47:57 ...

  9. struts2的文件上传和文件下载

    实现使用Struts2文件上传和文件下载: 注意点: (1)对应表单的file1和私有成员变量的名称必须一致 <input type="file" name="fi ...

随机推荐

  1. QTableView中加入Check列实现,无需Delegate(使用::data(),Qt原生支持)

    通过Delegate创建QCheckBox来实现的Check列,只有在该列进入编辑模式时才能够Check/Uncheck.这显然不是我们想要的,网上翻来翻去,在一个国外论坛中看到了无需Delegate ...

  2. XP系統IIS最大連接數修改

    方法一: 安裝軟件 http://download.microsoft.com/download/iis50/Utility/5.0/NT45/EN-US/MtaEdt22.exe 然後進入  W3S ...

  3. centos yum 安装 jdk1.8

    JDK: 版本:1.8 服务器默认安装1.7,所以不使用默认安装 yum -y list java* --查看yum的jdk安装包 yum install java-1.8.0-openjdk jav ...

  4. 【jar包管理】Maven BOM

    BOM Alibaba Spring Boot Dependencies is a Maven BOM used to manage the versions of most used Alibaba ...

  5. 【Netty整理01-快速入门】Netty简单使用Demo(已验证)

    多处摘抄或手打,为了十积分厚着脸皮标为原创,惭愧惭愧~本篇文章用于快速入门搭建一个简单的netty 应用,如想稍微深入系统的了解,请参照本人下一篇博客,链接: 参考地址: 官方文档:http://ne ...

  6. Paxos算法——前世

    Paxos算法是基于消息传递且具有高度容错特性的一致性算法.我们将从一个简单的问题开始,逐步的改进我们的设计方案,最终得到Paxos,一个可以在逆境下工作的协议. 一.客户端-服务器模型 我们从最小的 ...

  7. CentOS7.3安装JIRA7.10

    准备工作:下载相关安装包,上传到服务器/opt/apps目录下 链接:https://pan.baidu.com/s/15Y5Y3X6AX2ZokWkZKcRrQQ 密码:q0lw 1.安装数据库 y ...

  8. Linux实例/etc/fstab文件配置错误导致系统启动异常

    Centos 7.3系统 问题现象: 阿里云ECS升级配置后重启,SSH连接不上.登录控制台远程连接ECS,出现以下界面.  提交工单阿里云反馈:https://help.aliyun.com/kno ...

  9. 并发编程-concurrent指南-阻塞队列-延迟队列DelayQueue

    DelayQueue是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走.这种队列是有序的,即队头对象的延迟到期时间最长.注意:不能 ...

  10. UVa 1440:Inspection(带下界的最小流)***

    https://vjudge.net/problem/UVA-1440 题意:给出一个图,要求每条边都必须至少走一次,问最少需要一笔画多少次. 思路:看了好久才勉强看懂模板.良心推荐:学习地址. 看完 ...