最近在做一个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. java中静态类与普通类之间区别

    所谓静态,指以static关键字修饰的,包括类,方法,块,字段. 非静态,指没有用static 修饰的. 一.静态类的特点 1.全局唯一,任何一次的修改都是全局性的影响 2.只加载一次,优先于非静态 ...

  2. Windows下OSGEarth的编译过程

    目录 1. 依赖 1) OpenSceneGraph 2) GDAL 3) CURL 4) GEOS 5) 其他 2. 编译 1) 设置参数 2) 配置路径 3) 生成编译 3. 参考文献 1. 依赖 ...

  3. kali 源文件 更改和使用 更新日期:2018.04.21

    我的公众号,正在建设中,欢迎关注: 0x01 源文件格式: kali下常用的更新命令有: apt-get install update和apt-get install upgrade,update是下 ...

  4. spark 源码分析之四 -- TaskScheduler的创建和启动过程

    在 spark 源码分析之二 -- SparkContext 的初始化过程 中,第 14 步 和 16 步分别描述了 TaskScheduler的 初始化 和 启动过程. 话分两头,先说 TaskSc ...

  5. GitLab通过API创建项目

    示例: #!/usr/bin/python # -*- coding:utf-8 -*- import os import json import requests import subprocess ...

  6. linux 安装 websocketd

    1.下载 wget https://github.com/joewalnes/websocketd/releases/download/v0.3.0/websocketd-0.3.0-linux_am ...

  7. python 基本数据类型之列表

    #列表是可变类型,可以增删改查#字符串不可变类型,不能修改,只能生成新的值. #1.追加 # user_list = ['李泉','刘一','刘康','豆豆','小龙'] # user_list.ap ...

  8. C/C++应用程序内存泄漏检查统计方案

    一.前绪 C/C++程序给某些程序员的几大印象之一就是内存自己管理容易泄漏容易崩,笔者曾经在一个产品中使用C语言开发维护部分模块,只要产品有内存泄漏和崩溃的问题,就被甩锅“我的程序是C#开发的内存都是 ...

  9. SCUT 125 :笔芯回文(DP)

    https://scut.online/p/125 125. 笔芯回文 题目描述 bxbx有一个长度一个字符串SS,bxbx可以对其进行若干次操作. 每次操作可以删掉一个长度为k(1 \leq k \ ...

  10. String到底在内存中是如何存储的

    String会出现在哪些地方 方法内的局部string 类内的字段String static string 容器中存储的string String数组 那么String的位置会影响其存储方式吗? 显然 ...