说到文件上传、下载功能,网络上大多介绍的是采用JSP、SpringMVC或者Struts等开源框架的功能,通过配置达到文件上传、下载的目地。可是最近项目要用到文件上传与下载的功能,因为本项目框架采用开源框架SpringMVC、ExtJS、Hibernate写成的,当然借助SpringMVC框架本身的文件上传与下载也可以,但是同样需要和以前一样,编写一些配置文件,所以最近自己搞了一下关于ExtJS、SpringMVC的免配置文件上传与下载的功能研究。

提起文件上传,免不了客户端(提交文件)和服务器端(接收文件)的结合。

首先定义全局相关变量:

  1. /**
  2. * @author:limingzhong
  3. * @desc:定义相关全局静态变量
  4. * @Date:2012-02-28
  5. */
  6. private final static String UPLOAD_SUCCESS = "{success:true,mess:'文件上传成功!'}";
  7. private final static String UPLOAD_FAILURE = "{success:false,mess:'文件上传失败!'}";
  8. private final static String FILE_NO = "{success:false,mess:'文件不存在!'}";
  9. private final static String FILE_YES = "{success:true,mess:'文件存在!'}";
  10. private final static String CONTENT_TYPE = "text/html;charset=gb2312";
  11. private final static String APPLICATION = "application/octet-stream";

客户端:采用ExtJS的formPanel提交功能

  1. var excelUpload = new Ext.form.TextField({
  2. id:'excelUpload',
  3. anchor:'90%',
  4. height:30,
  5. width:350,
  6. name:'file',
  7. inputType:'file',
  8. fieldLabel:'文件选择'
  9. });
  10. var formPanel = new Ext.form.FormPanel({
  11. labelWidth:80,
  12. bodyStyle:'padding:5 5 5 5',
  13. height:515,
  14. width:200,
  15. frame:true,
  16. fileUpload:true,
  17. items:[excelUpload]
  18. });
  19. // 定义按钮
  20. var upLoadFile = new Ext.Toolbar.Button({
  21. text:'上传'
  22. });
  23. // 下载数据功能
  24. var up = function(bt) {
  25. var excelName = Ext.getCmp('excelUpload').getRawValue();// 上传文件名称的路径
  26. if (excelName == ""){
  27. Ext.Msg.show({title:'提示',msg:'请选择文件!',buttons:Ext.Msg.OK,icon:Ext.MessageBox.INFOR});
  28. return;
  29. }else {
  30. var array = new Array();
  31. array = excelName.split("\\");
  32. var length = array.length;
  33. var fileName = "";
  34. var index = 0;
  35. for (index = 0; index < length; index++) {
  36. if (fileName == "") {
  37. fileName = array[index];
  38. } else {
  39. fileName = fileName + "/" + array[index];
  40. }
  41. }
  42. formPanel.getForm().submit({
  43. url:'http://localhost:8080/pro/upload.json',
  44. method:'POST',
  45. waitMsg:'数据上传中, 请稍等...',
  46. success:function(form, action, o) {
  47. Ext.MessageBox.alert("提示信息",action.result.mess);
  48. },
  49. failure : function(form, action) {
  50. Ext.MessageBox.alert("提示信息","请求失败,文件上传失败");
  51. }
  52. });
  53. }
  54. }
  55. // 添加按钮的响应事件
  56. upLoadFile.addListener('click', up, false);
  57. var window = new Ext.Window({
  58. title:'上传文件',
  59. width:500,
  60. height:200,
  61. minWidth:500,
  62. minHeight:200,
  63. layout:'fit',
  64. plain:true,
  65. modal:true,
  66. //closeAction:'hide',
  67. bodyStyle:'padding:5px;',
  68. buttonAlign:'center',
  69. items:formPanel,
  70. buttons:[upLoadFile]
  71. });
  72. window.show();

服务器端:根据SpringMVC注解直接调用对应方法,采用流的形式上传文件,这样直接避免配置xml等文件的麻烦。

  1. /**
  2. * @author:limingzhong
  3. * @throws:IOException
  4. * @desc:上传文件
  5. * @params:自带参数,客户端不传入实参
  6. * @Date:2012-02-28
  7. */
  8. @RequestMapping(value = "/upload.json")
  9. public void upLoad(HttpServletRequest request,HttpServletResponse response) throws IOException {
  10. response.setContentType(CONTENT_TYPE);
  11. PrintWriter out = response.getWriter();
  12. if (!ServletFileUpload.isMultipartContent(request)){
  13. out.println(UPLOAD_FAILURE);
  14. }
  15. String name = null;
  16. try {
  17. DiskFileItemFactory factory = new DiskFileItemFactory();
  18. factory.setSizeThreshold(4096);
  19. ServletFileUpload upload = new ServletFileUpload(factory);
  20. upload.setSizeMax(4 * 1024 * 1024);
  21. Iterator<?> iter = upload.parseRequest(request).iterator();
  22. while (iter.hasNext()) {
  23. FileItem item = (FileItem) iter.next();
  24. if (item.isFormField()) {
  25. name = item.getFieldName();
  26. out.println(UPLOAD_FAILURE);
  27. } else {
  28. name = item.getName();
  29. String path = getPath();
  30. if(path==null || path==""){
  31. out.println(UPLOAD_FAILURE);
  32. }else{
  33. item.write(new File(path+name.substring(name.lastIndexOf(File.separator)+1,name.length()))); //保存上传文件
  34. out.println(UPLOAD_SUCCESS);
  35. }
  36. }
  37. }
  38. out.close();
  39. } catch (Exception e) {
  40. out.println(UPLOAD_FAILURE);
  41. out.close();
  42. }
  43. }

至此,文件上传的功能已结束。

下面把下载功能的客户端和服务器端的代码贴出来,以供大家拍砖:

客户端:

  1. window.location.href = 'http://127.0.0.1:8080/pro/down.json?fileName='+encodeURI(encodeURI(fileName));

服务器端:

  1. /**
  2. * @author:limingzhong
  3. * @throws:IOException
  4. * @desc:下载文件
  5. * @params:fileName-文件名称
  6. * @Date:2012-02-28
  7. */
  8. @RequestMapping(value = "/down.json")
  9. public void down(@RequestParam("fileName") String fileName,HttpServletRequest request,HttpServletResponse response) throws IOException {
  10. response.setContentType(APPLICATION);
  11. fileName = URLDecoder.decode(fileName, "utf-8");
  12. String path = getPath()+fileName;
  13. path = path.replace("%20", " ");
  14. File file = new File(path);
  15. // 清空response
  16. response.reset();
  17. // 设置response的Header
  18. response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gbk"),"iso8859-1"));
  19. response.addHeader("Content-Length", "" + file.length());
  20. try{
  21. //以流的形式下载文件
  22. InputStream fis = new BufferedInputStream(new FileInputStream(path));
  23. byte[] buffer = new byte[fis.available()];
  24. fis.read(buffer);
  25. fis.close();
  26. OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
  27. toClient.write(buffer);
  28. toClient.flush();
  29. toClient.close();
  30. }catch(Exception e){
  31. e.printStackTrace();
  32. }
  33. }

至此,文件下载的功能已结束。

来自:http://blog.csdn.net/limingzhong198/article/details/7324570

ExtJS+SpringMVC文件上传与下载的更多相关文章

  1. SpringMVC文件上传和下载的实现

    SpringMVC通过MultipartResolver(多部件解析器)对象实现对文件上传的支持. MultipartResolver是一个接口对象,需要通过它的实现类CommonsMultipart ...

  2. SpringMVC文件上传和下载

    上传与下载 1文件上传 1.1加入jar包 文件上传需要依赖的jar包 1.2配置部件解析器 解析二进制流数据. <?xml version="1.0" encoding=& ...

  3. SpringMVC文件上传与下载

    一.关键步骤 ①引入核心JAR文件 SpringMVC实现文件上传,需要再添加两个jar包.一个是文件上传的jar包,一个是其所依赖的IO包.这两个jar包,均在Spring支持库的org.apach ...

  4. springMVC文件上传与下载(六)

    1..文件上传 在springmvc.xml中配置文件上传解析器 <!-- 上传图片配置实现类,id必须为这个 --> <bean id="multipartResolve ...

  5. SpringMVC 文件上传及下载

    首先需要导入jar包 创建一个jsp页面 package cn.happy.Controller; import java.io.File; import javax.servlet.http.Htt ...

  6. SpringMVC文件上传下载

    在Spring MVC的基础框架搭建起来后,我们测试了spring mvc中的返回值类型,如果你还没有搭建好springmvc的架构请参考博文->http://www.cnblogs.com/q ...

  7. 使用SpringMVC框架实现文件上传和下载功能

    使用SpringMVC框架实现文件上传和下载功能 (一)单个文件上传 ①配置文件上传解释器 <!—配置文件上传解释器 --> <mvc:annotation-driven>&l ...

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

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

  9. springmvc之文件上传、下载

    1.接收到的是图片的流时 //上传头像 @RequestMapping(value = "/uploadHeadSculpture", method = RequestMethod ...

随机推荐

  1. java常用的Utils写法

    Utils: 获取年龄 属性文件获取 BeanCopy    分页 MapUtils 获取年龄: /** * 根据传入的日期计算年龄,因时间戳是从1970年开始计算的 * @param date * ...

  2. UI5-文档-4.26-(Optional) Remote OData Service

    到目前为止,我们已经使用了本地JSON数据,但是现在我们将访问一个真正的OData服务来可视化远程数据. 用可公开获得的Northwind OData服务显示并替换发票模型的JSONModel类型,以 ...

  3. fiddler 修改request请求

    例:在request url后追加&test=1参数 在OnBeforeRequest函数中添加以下代码 if(oSession.uriContains("www.bing.com/ ...

  4. Mybatis知识(3)

    1.JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的? ① 数据库链接创建.释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题. 解决:在SqlMapConfig ...

  5. github上关于iOS的各种开源项目集合(转)

    UI 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITable ...

  6. Haskell语言学习笔记(52)正则表达式

    Text.Regex.PCRE.Heavy $ brew install pcre $ cabal install pcre-heavy Installed pcre-heavy-1.0.0.2 Pr ...

  7. 在windows 2008 R2中SQl Server 2008中代理启动失败的一个原因总结

    启动SQL代理的时候报错如下: 关调用实时(JIT)调试而不是此对话框的详细信息,请参见此消息的结尾. ************** 异常文本 **************System.NullRef ...

  8. php 利用迭代器遍历文件夹

    1.遍历文件夹 scandir 2.原生的迭代器Iterrate $scan_dir = "txtDir"; //下面会遍历txtDir 下面所有字文件夹中的文件哦 $dir_it ...

  9. Codeforces Round #533 (Div. 2)

    C: 题意: 有n个整数ai,数列a有两个神奇的性质.1.所有的整数都在[l,r]范围内.2.这n个数的和能被3整除.现在给出l和r,和个数n,问你有多少种方法构造出数列a,方案数mod1e9+7. ...

  10. httplib:AttributeError: 'module' object has no attribute 'HTTPConnection'

    # -*-coding:gb2312-*- #Function:学习python的httplib模块 import httplib conn = httplib.HTTPConnection(&quo ...