前台,extjs,框架,mybatis,spring,springMVC,简单的文件上传下载案例。

必要的jar包,commons-fileupload-1.3.1.jar,commons-io-2.0.1.jar,commons-lang-2.6.jar

1、extjs前台,文件上传:

上传window。

Ext.ns('Ext.sms')
Ext.sms.BaseRulesUploadWindow=Ext.extend(Ext.Window,{
    constructor:function(_config){   
        if(_config==null){        
            _config={};
        }
        Ext.apply(this,_config);    
        this.uploadPanel=new Ext.FormPanel({
                fileUpload : true, //默认为图片上传
                id:Ext.id(),
                
                baseCls : 'x-plain',
                bodyStyle : 'padding-top:10px;padding-left:0px;',
                closealbe : true,
                items : [{
                        labeWidth:40,
                        xtype : 'textfield',
                        name : 'file',
                        inputType : 'file',
                        allowBlank : false,
                        width:160,
                        fieldLabel : '上传'
                }]
        });
        Ext.sms.BaseRulesUploadWindow.superclass.constructor.call(this,{
            title:'文件上传',
            id:Ext.id(),
            modal:true,
            height:120,
            width:350,
            items:[this.uploadPanel]
        });
    }
});

2、上传的controller方法:

/**
     * 方法描述:上传文件到本地
     * @param file 要上传的文件
     * @param request
     * @param response 写出
     */
    @RequestMapping("/upload")
    public void upload(@RequestParam MultipartFile file,HttpServletRequest request,HttpServletResponse response){
        try {
            String msg = FileDownLoadUtils.fileUpload(file, request, "/upload/baseRules", 0);
            System.out.println(msg);
            response.setContentType("text/html;charset=utf-8;");
            response.getWriter().write(msg);
            response.getWriter().flush();
            response.getWriter().close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

3、静态的文件上传方法:(本方法属于FileDownLoadUtils类)

public static String fileUpload(MultipartFile file, HttpServletRequest request,String saveFolder,long maxSize){
        String returnMsg  = null;
        try {
            
            // 保存的地址
            String savePath = request.getSession().getServletContext().getRealPath("/"+saveFolder);
            if(maxSize!=0 && file.getSize()>maxSize){
                returnMsg = JackJson.fromObjectToJson(new ExtReturn(false, "文件大小超过了"+maxSize/(1024*1024)+"M了,上传失败!"));
                return returnMsg;
            }
            // 上传的文件名 //需要保存
            String uploadFileName = file.getOriginalFilename();
            // 获取文件后缀名 //需要保存
            String fileType = StringUtils.substringAfterLast(uploadFileName, ".");
            // 以年月/天的格式来存放
            String dataPath = DateFormatUtils.format(new Date(), "yyyy-MM" + File.separator + "dd");
            // uuid来保存不会重复
            String saveName = UUID.randomUUID().toString().replace("-", "");
            // 最终相对于upload的路径,解决没有后缀名的文件 //需要保存
            // 为了安全,不要加入后缀名
            // \2011-12\01\8364b45f-244d-41b6-bbf4-8df32064a935,等下载的的时候在加入后缀名
            String finalPath = File.separator + dataPath + File.separator + saveName + ("".equals(fileType) ? "" : "." + fileType);
            logger.debug("savePath:{},finalPath:{}", new Object[] { savePath, finalPath });
            File saveFile = new File(savePath + finalPath);
            // 判断文件夹是否存在,不存在则创建
            if (!saveFile.getParentFile().exists()) {
                saveFile.getParentFile().mkdirs();
            }
            // 写入文件
            FileUtils.writeByteArrayToFile(saveFile, file.getBytes());
            // 保存文件的基本信息到数据库
            StringBuffer buffer = new StringBuffer();
            buffer.append("{success:true,fileInfo:{fileName:'").append(uploadFileName).append("',");
            buffer.append("filePath:'").append(savePath.replace("\\", "/")+finalPath.replace("\\", "/")).append("',");          
            buffer.append("projectPath:'").append(saveFolder).append(finalPath.replace("\\", "/")).append("',");
            buffer.append("storeName:'").append(saveName + ("".equals(fileType) ? "" : "." + fileType));
            buffer.append("'}}");
            returnMsg = buffer.toString();
            
        } catch (Exception e) {
            logger.error("Exception: ", e);
        }
        return returnMsg;
    }

4、spring-servlet.xml文件中需要配置multipartfile相关的配置:如下

<init-param>
<param-name>upload.enabled</param-name>
<param-value>false</param-value>
</init-param>

《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《

1、文件下载

基于XTemplate白板的文件下载extjs页面

Ext.ns('Ext.sms')
Ext.sms.BaseRulesReadWindow = new Ext.extend(Ext.Window,{
    downloadUrl:ctx+"/baseRulesFile/downLoadFile",
    constructor:function(_config){
        if(_config==null){
            _config={};
        }

Ext.apply(this,_config);
        Ext.sms.BaseRulesReadWindow.superclass.constructor.call(this,{
            width:720,
            height:480,
            bodyStyle: 'background:white;',
            layout:'fit',
            autoScroll:true,
            modal:true, // 模态窗口
            closeAction:'hide',
            closable:true,
            padding:'5 5 5 5',
            buttons:[{
                text:'关闭',
                scope:this,
                handler:function(){
                    this.hide();
                }
            }]
            
        });
    },
    afterRender:function(){
        Ext.sms.BaseRulesReadWindow.superclass.afterRender.call(this);
        this.initTemplate();
    },
    initTemplate: function(){
        this.noticeTemplate = new Ext.XTemplate('<div class="notice">',
            '<div style="text-align:center;font-size: 200%;<h2>{rulesTitle}</h2></div>',
            '<div style="text-align:right;padding-right:0.5cm;font-size: 110%;background-color:white"><span>作者:{rulesAuthor}</span>&nbsp;&nbsp;<span>创建时间:{createTime:date("Y-m-d H:i:s")}</span></div>',
            '<div style="text-indent:20px;padding: 0.5cm;line-height:150%;font-size: 130%;{rulesContent}</div>',
            '<tpl if="fileList != null">',
            '<div style="text-indent:20px;padding: 0.5cm;line-height:150%;font-size: 120%;<ul>',            
            '<tpl for="fileList">',    
               '<tpl if="downloadPath != null">',
                   '<li id="li-{[values.fileId]}">附件名称:<a class="noticeFile" href="{[values.downloadPath]}?filePath={[values.filePath]}&fileName={[values.fileName]}&id={[parent.id]}&attachId={[values.fileID]}" target="_self">{[values.fileName]}</a>&nbsp;&nbsp;</li>',            
               '</tpl>',
               '<tpl if="downloadPath == null">',
                   '<li id="li-{[values.fileId]}">附件名称:<a class="noticeFile" href="'+this.downloadUrl+'?fileId={[values.fileId]}" target="_self">{[values.fileName]}</a>&nbsp;&nbsp;</li>',            
               '</tpl>',
            '</tpl>',                
            '</ul></div>',
            '</tpl>',
            '</div>'
        );        
        this.noticeTemplate.compile();
    },
    loadBaseRules:function(notice){
        if(notice==null){
            notice={};
        }
        this.noticeTemplate.overwrite(this.body,notice);
    }
})

2、文件下载controller

/**
     * 方法描述:下载文件
     * @param fileId 要下载的文件,唯一标识
     * @param session
     * @param response
     */
    @RequestMapping(value="/downLoadFile", method = RequestMethod.GET)
    public void downLoadFile(String fileId,HttpSession session,HttpServletResponse response){
            //获取文件详细信息
            BaseRulesFile baseRulesFile = baseRulesFileService.getFileById(fileId);
            // 下载
            String filePath = session.getServletContext().getRealPath("/");
            //下载
            FileDownLoadUtils.downloadFile(baseRulesFile.getFilePath(), baseRulesFile.getFileName(), response);       
        }

3、静态的文件下载方法:(本方法属于FileDownLoadUtils类)

public static void  downloadFile(String filePath,String fileName,HttpServletResponse response){
        InputStream input = null;
        ServletOutputStream output = null;
        try {
            File downloadFile = new File(filePath);
            // 判断文件夹是否存在,不存在则创建
            if (!downloadFile.getParentFile().exists()) {
                downloadFile.getParentFile().mkdirs();
            }
            // 判断是否存在这个文件
            if (!downloadFile.isFile()) {
                // 创建一个
                FileUtils.touch(downloadFile);
            }           
        
            //response.setContentType("application/octet-stream;charset=UTF-8");
            response.setContentType("application/x-msdownload");  
            response.setCharacterEncoding("UTF-8");
           
//            response.setHeader("content-disposition", "attachment; filename=" + URLEncoder.encode(fileName,"UTF-8"));
          //解决中文乱码  
            response.setHeader("Content-Disposition","attachment;filename="+new String(fileName.getBytes("gbk"),"iso-8859-1"));

input = new FileInputStream(downloadFile);
            output = response.getOutputStream();
            IOUtils.copy(input, output);
            output.flush();
        } catch (Exception e) {
            logger.error("Exception: ", e);
        } finally {
            IOUtils.closeQuietly(output);
            IOUtils.closeQuietly(input);
        }
    }

4、spring-servlet.xml文件中需要配置multipartfile相关的配置:如下

<init-param>
<param-name>upload.enabled</param-name>
<param-value>false</param-value>
</init-param>

//以上是简单的文件上传下载重点环节

extjs插件开发上传下载文件简单案例相关推荐

  1. python上传本地文件到ftp_python实现的简单FTP上传下载文件实例

    本文实例讲述了python实现的简单FTP上传下载文件的方法.分享给大家供大家参考.具体如下: python本身自带一个FTP模块,可以实现上传下载的函数功能. #!/usr/bin/env pyth ...

  2. ftp上传下载文件详解

    首先导入包 import org.apache.commons.NET.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; FTPCli ...

  3. 在Windows上使用终端模拟程序连接操作Linux以及上传下载文件

    在Windows上使用终端模拟程序连接操作Linux以及上传下载文件 [很简单,就是一个工具的使用而已,放这里是做个笔记.] 刚买的云主机,或者是虚拟机里安装的Linux系统,可能会涉及到在windo ...

  4. JavaWeb:上传下载文件

    1. 文件上传概述 1.1 文件上传的作用 例如网络硬盘!就是用来上传下载文件的. 在智联招聘上填写一个完整的简历还需要上传照片呢. 1.2 文件上传对页面的要求 上传文件的要求比较多,需要记一下: ...

  5. linux上很方便的上传下载文件工具rz和sz

    linux上很方便的上传下载文件工具rz和sz (本文适合linux入门的朋友) ######################################################### # ...

  6. java 上传文件及预览_SpringBoot上传下载文件及在线预览

    SpringBoot上传下载文件及在线预览 今天大概就说说如何使用SpringBoot进行上传和下载以及在线预览文件 本篇主要介绍上传下载的功能,对于界面就简单一点,大致如下: 一.老规矩还是先看看小 ...

  7. linux ftp 登录慢,linux中vsftpd登录,上传下载文件慢解决办法linux操作系统 -电脑资料...

    vsftpd登录慢主要是nameserver #定义DNS服务器的IP地址没有设置了,这样我们只要设置或更新一下nameserver即可解决了, 在使用vsftpd的过程中,一直以来都有一个问题就是在 ...

  8. go ssh 执行多个命令_Gox语言中通过SSH远程执行命令及上传下载文件-GX10

    Gox语言作为一个"粘合剂"语言,当然需要有便捷的网络编程能力和远程服务器操作的能力,没有让人失望的是,这确实也正是它所擅长的. 再次说明,Gox语言的安装很简单,只需要去官网下载 ...

  9. ie11 java 下载文件_Javaweb实现上传下载文件的多种方法

    在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为commons-f ...

最新文章

  1. jvm性能调优实战 - 36XX:SoftRefLRUPolicyMSPerMB配置引起的Metaspace频繁FullGC
  2. 分享一套开源微信后台开发源码,简单配置就能使用(附源码)!
  3. XP系统和Sever2003系统现实定时开关机
  4. Last non-zero Digit in N! HDU - 1066
  5. html button跳转页面_Html
  6. python如何读取文本_python怎么读取文本文件
  7. 内容分发系统MediaEW:助新闻媒体转投HTML5
  8. Qt 判断文件或文件夹是否存在及创建文件夹
  9. Jenkins pipeline+Maven+Gitlab
  10. c/c++初学者用什么软件比较好
  11. 【Arduino实验03 智能红绿灯】
  12. java基础习题_Java基础知识练习题及答案
  13. JAVA_OPTS修改配置在哪里_JAVA_OPTS參數說明與配置
  14. java小程序体重监测,一个计算标准体重的小程序
  15. 我们错过了那么多机会,怎么办
  16. 苹果手机用计算机打不开怎么回事啊,苹果手机商店打不开怎么办
  17. 读《小强升职记》总结
  18. 文件上传漏洞利用介绍
  19. 计算机无法在安全模式下完成安装,最近我的电脑安装不了软件,总提示说Windows在安全模式下运行? 爱问知识人...
  20. 芯片验证需要围绕DUT做什么?

热门文章

  1. poj 1905 Expanding Rods(二分)
  2. GNU make manual 翻译(七十三)
  3. angular 的配置文件的应用
  4. kvm虚拟化存储管理(3)
  5. 北京大学Cousera学习笔记--3-计算导论与C语言基础-第一讲.计算机的基本原理-计算机怎么计算-数的二进制...
  6. Angular JS 中的内置方法之$watch
  7. 货店管理(delphi+sqlserver)
  8. NK3C程序资源占用分析
  9. IIs+php 最精简的环境配置
  10. 分享WEBAPP利用纯HTML5实现拨打电话,打开相册,打开摄像头源码