SpringMvc3+extjs4实现上传与下载功能

最近生活过的很充实,人一直在不停的忙碌着学习新东西。这是我最近遇到的问题,我找度娘n了很久,终于找到了解决方案!

前台代码:

<script>
 Ext.onReady(function() {

    Ext.create('Ext.form.Panel', {
      title : '文件上传',
      width : 400,
      bodyPadding : 10,
      frame : true,
      renderTo : document.body,
      items : [ {
        xtype : 'filefield',
        name : '文件',
        fieldLabel : 'File',
        labelWidth : 50,
        msgTarget : 'side',
        allowBlank : false,
        anchor : '100%',
        buttonText : '请选择文件...'
      } ],

      buttons : [ {
        text : '上传',
        handler : function() {
          var form = this.up('form').getForm();
          if (form.isValid()) {
            form.submit({
              url : '根路径/fileUploadDown/fileUpload',
              waitMsg : '正在上传文件中...',
              success : function(fp, o) {
                Ext.Msg.alert('上传文件成功!');
              }
            });
          }
        }
      } ]
    });

  });
</script>

后台代码:

/**
*记录返回结果*/
 class ExtJSFormResult {

  private boolean success;

  public boolean isSuccess() {
    return success;
  }

  public void setSuccess(boolean success) {

  }

  public String toString() {
    return "{success:" + this.success + "}";
  }
}

class FileUploadBean {

    private CommonsMultipartFile file;

    public CommonsMultipartFile getFile() {
      return file;
    }

    public void setFile(CommonsMultipartFile file) {
      this.file = file;
    }
}

/**
 * 文件的上传与下载
 * @author Administrator
 *
 */
@Controller
@RequestMapping(value = "/fileUploadDown")
public class FileUploadAndDownController {

  private static int countter=1; //定义一个计数器,用于上传文件的重命名

  @Autowired
  private ProAnnexDao<ProAnnex> proAnnextDao;

  public void setProAnnextDao(ProAnnexDao<ProAnnex> proAnnextDao) {
    this.proAnnextDao = proAnnextDao;
  }

  @RequestMapping(value="fileUpload",method = RequestMethod.POST)
  public @ResponseBody String create(RedirectAttributes redirectAttributes,FileUploadBean uploadItem,
      BindingResult result,HttpSession session){
    //获取根路径
    String uploadFolderPath = session.getServletContext().getRealPath("/");
    ExtJSFormResult extjsFormResult = new ExtJSFormResult();
    try {

      if (result.hasErrors()) {
        for (ObjectError error : result.getAllErrors()) {
          System.err.println("Error: " + error.getCode() + " - "
              + error.getDefaultMessage());
        }

        // 设置ExtJS返回 - error
        extjsFormResult.setSuccess(false);

        return extjsFormResult.toString();
      }

      MultipartFile file = uploadItem.getFile();
      String fileName = null;
      InputStream inputStream = null;
      OutputStream outputStream = null;
      if(file.getSize()>0){
         System.out.println("File Size:::" + file.getSize());
        if(file.getSize()>5242880){
           System.out.println("File Size:::" + file.getSize());
           extjsFormResult.setSuccess(false);
          return "error";
        }

       inputStream = file.getInputStream();

       File newFile = new File(uploadFolderPath + "fileUpload/");
       //如果文件路径不存在就新建一个
       if(!newFile.exists()){
         newFile.mkdirs();
       }
       //获取文件名
       String name=file.getOriginalFilename();
       //从数据库中查询存在此类文件名否
        Long count=proAnnextDao.isRepeatName(name);
        //如果存在一样的文件名,就进行从命名
        if (count>0) {
          name=name.substring(0, name.lastIndexOf("."))+"("+(countter++)+")"+name.substring(name.lastIndexOf("."));
        }

        fileName = uploadFolderPath + "fileUpload/" + name;
        outputStream = new FileOutputStream(fileName);
        int readBytes = 0;
        byte[] buffer = new byte[10000];
        while ((readBytes = inputStream.read(buffer, 0, 10000)) != -1) {
            outputStream.write(buffer, 0, readBytes);
        }

        outputStream.close();
        inputStream.close();

      }

      // 设置ExtJS返回 - sucsess
      extjsFormResult.setSuccess(true);
    } catch (Exception e) {

      e.printStackTrace();
      // 设置ExtJS返回 - error

      extjsFormResult.setSuccess(false);
    }

    return extjsFormResult.toString();
  }

}

springMvc.xml(此文件名可能跟项目的实际情况有区别)中的配置:

<!-- 上传文件,限制大小的配置 -->
   <bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
     <!--resolveLazily属性启用是为了推迟文件解析,以便在Upload中捕获文件大小异常-->
    <property name="resolveLazily" value="true"/>
    <property name="maxUploadSize" value="5242880" />
  </bean>

  <!-- 将无法mapping到Controller的path交给default servlet handler处理   -->
  <mvc:default-servlet-handler/><!-- 使用默认的servlet来响应静态文件 -->
  <!-- 文件的上传与下载 -->
  <mvc:view-controller path="/" view-name="redirect:/fileUploadDown"/>

以上的就是上传文件了。

下载呢?

下载比较简单,代码如下:

@RequestMapping("/downloadFile")
  public void download(@Valid @ModelAttribute("downLoadName") String downLoadName,
      HttpServletResponse response,HttpSession session,BindingResult result,HttpServletRequest request) throws IOException { 

    response.setCharacterEncoding("UTF-8");
    request.setCharacterEncoding("UTF-8");
    //获取文件的路径
    String url=session.getServletContext().getRealPath("/")+"/fileUpload/"+downLoadName;
    System.out.println(url);
    File file=new File(url);

    InputStream input = FileUtils.openInputStream(file);
    byte[] data = IOUtils.toByteArray(input); 

    //System.out.println("文件名:"+downLoadName);
    response.reset();
   //设置响应的报头信息(中文问题解决办法)
    response.setHeader("content-disposition","attachment;fileName="+URLEncoder.encode(downLoadName, "UTF-8"));
    response.addHeader("Content-Length", "" + data.length);
    response.setContentType("application/octet-stream; charset=UTF-8"); 

    IOUtils.write(data, response.getOutputStream());
    IOUtils.closeQuietly(input); 

  }

在界面上只要有一个连接地址:如:window.location.href="根路径/fileUploadDown/downfile/downLoadName=" rel="external nofollow" +name;这样就可以下载了....   超连接的写法基本一样,这里就不多说了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • SpringMVC实现文件的上传和下载实例代码

    前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:"用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流".我回复他说:"使用SpringMVC框架可以做到这一点,因为SpringMVC为文件的上传提供了直接的支持,但需要依赖Apache提供Commons FileUpload组件jar包."鉴于这个问题,我上网也百度了一下,网上很多都是介绍的使用IO流来实现文件的上传和下载,也有说到框架的,但介绍的并不是很完整,今天小钱将和大家介绍使用Spr

  • SpringMVC实现文件上传和下载功能

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 文件上传 第一步,加入jar包: commons-fileupload-1.3.1.jar commons-io-2.4.jar 第二步,在SpringMVC配置文件中配置CommonsMultipartResovler <bean id="multipartResolver" class="org.springframework.web.multipart.commons.Commo

  • 学习SpringMVC——国际化+上传+下载详解

    一个软件,一个产品,都是一点点开发并完善起来的,功能越来越多,性能越来越强,用户体验越来越好--这每个指标的提高都需要切切实实的做点东西出来,好比,你的这个产品做大了,用的人多了,不仅仅再是上海人用,北京人用,还有印度人用,法国人用等等,可以说这个产品已经走上了国际化的大舞台.当印度的哥们输入url访问产品时,界面上弹出"欢迎您,三哥",估计哥们当场就蒙圈了.而这个时候,国际化就应运而生了. 要做国际化这道菜,真的没有想象中的那么复杂,反而很简单,不信你看-- 1. 注入Resourc

  • springMVC配置环境实现文件上传和下载

    最近的项目中用到了文件的上传和下载功能,我觉着这个功能比较重要,因此特意把它提取出来自己进行了尝试. 下面就是springMVC配置环境实现文件上传和下载的具体步骤,供大家参考,具体内容如下 一. 基础配置: maven导包及配置pom.xml,导包时除开springmvc的基础依赖外,需要导入文件上传下载时用到的commons-io.jsr和commons-fileupload.jar: <project xmlns="http://maven.apache.org/POM/4.0.0&

  • MyBatis与SpringMVC相结合实现文件上传、下载功能

    环境:maven+SpringMVC + Spring + MyBatis + MySql 本文主要说明如何使用input上传文件到服务器指定目录,或保存到数据库中:如何从数据库下载文件,和显示图像文件并实现缩放. 将文件存储在数据库中,一般是存文件的byte数组,对应的数据库数据类型为blob. 首先要创建数据库,此处使用MySql数据库. 注意:文中给出的代码多为节选重要片段,并不齐全. 1. 前期准备 使用maven创建一个springMVC+spring+mybatis+mysql的项目

  • IE8+SpringMVC文件上传防止JSON下载

    今天在IE8测试文件上传的时候发现总是提示下载,原因是上传接口返回的是json,通过以下修改就可以保证返回是json并且不会出现下载的情况: 同时适用于当设置SPRING 视图解析器的时候,不能去掉@responseBody的问题 @RequestMapping(value = "/batchUpload", method = RequestMethod.POST,produces = "text/json;charset=UTF-8") @ResponseBody

  • 在SpringMVC框架下实现文件的上传和下载示例

    在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation=&

  • SpringMvc3+extjs4实现上传与下载功能

    最近生活过的很充实,人一直在不停的忙碌着学习新东西.这是我最近遇到的问题,我找度娘n了很久,终于找到了解决方案! 前台代码: <script> Ext.onReady(function() { Ext.create('Ext.form.Panel', { title : '文件上传', width : 400, bodyPadding : 10, frame : true, renderTo : document.body, items : [ { xtype : 'filefield', n

  • Python使用sftp实现上传和下载功能(实例代码)

    在Python中可以使用paramiko模块中的sftp登陆远程主机,实现上传和下载功能. 1.功能实现 根据输入参数判断是文件还是目录,进行上传和下载 本地参数local需要与远程参数remote类型一致,文件以文件名结尾,目录以\结尾 上传和下载的本地和远程目录需要存在 异常捕获 2.代码实现 #!/usr/bin/python # coding=utf-8 import paramiko import os def sftp_upload(host,port,username,passwo

  • Android编程实现图片的上传和下载功能示例

    本文实例讲述了Android编程实现图片的上传和下载功能.分享给大家供大家参考,具体如下: 在实现一个Android的WEB服务客户端,比如微博,论坛客户端时,经常会使用到图片的上传和下载.在这里介绍如何利用HttpClient实现图片的上传和下载功能. 1 图片上传:上传图片时,首先获得图片的路径,创建文件,并将图片转化为字节流写入到request,并发送该请求. 客户端代码: File file = new File(imageUrl); String httpUrl = httpDomai

  • WebApi2 文件图片上传与下载功能

    Asp.Net Framework webapi2 文件上传与下载 前端界面采用Ajax的方式执行 一.项目结构 1.App_Start配置了跨域访问,以免请求时候因跨域问题不能提交.具体的跨域配置方式如下,了解的朋友请自行略过. 跨域配置:NewGet安装dll Microsofg.AspNet.Cors 然后在App_Start 文件夹下的WebApiConfig.cs中写入跨域配置代码. public static class WebApiConfig { public static vo

  • Java实现FTP文件的上传和下载功能的实例代码

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件.在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)."下载"文件就是从远程主机拷贝文件至自己

  • JavaWeb 文件的上传和下载功能简单实现代码

    一.文件的上传和下载 1.文件上传的原理分析 1.文件上传的必要前提: a.提供form表单,method必须是post           b.form表单的enctype必须是multipart/form-data           c.提供input type="file"类的上传输入域 2.enctype属性 作用:告知服务器请求正文的MIME类型(请求消息头:Content-Type作用是一致的)      可选值: application/x-www-form-urlen

  • 拥有网页版小U盘 ASP.NET实现文件上传与下载功能

    今天看到了一篇不错的文章,就拿来一起分享一下吧. 实现的是文件的上传与下载功能. 关于文件上传: 谈及文件上传到网站上,首先我们想到的就是通过什么上传呢?在ASP.NET中,只需要用FileUpload控件即可完成,但是默认上传4M大小的数据,当然了你可以在web.config文件中进行修改,方式如下: <system.web> <httpRuntime executionTimeout="240" maxRequestLength="20480"

  • C#实现附件上传和下载功能

    通常情况下,我们会遇到各种上传附件的情况,以及上传后需要下载,文档格式各种各样,当然这个过程中也是报不同错误,还是一个原则,具体问题,具体分析:需求图: 上传代码实现:  aspx代码: <asp:Panel ID="Panel5" runat="server"> <fieldset> <legend>整体活动效果:</legend> <nav class="navbar navbar-default&

  • Retrofit+Rxjava实现文件上传和下载功能

    Retrofit简介: 在Android API4.4之后,Google官方使用了square公司推出的okHttp替换了HttpClient的请求方式.后来square公司又推出了基于okHttp的网络请求框架:Retrofit. 什么是 RxJava? RxJava 是一个响应式编程框架,采用观察者设计模式.所以自然少不了 Observable 和 Subscriber 这两个东东了. RxJava 是一个开源项目,地址:https://github.com/ReactiveX/RxJava

随机推荐