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

发布时间 - 2026-01-11 02:06:13    点击率:

本文实例为大家分享了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="+name;这样就可以下载了....   超连接的写法基本一样,这里就不多说了.

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


# SpringMvc3  # extjs4  # 上传  # 下载  # SpringMVC+Ajax实现文件批量上传和下载功能实例代码  # MyBatis与SpringMVC相结合实现文件上传、下载功能  # SpringMVC实现文件的上传和下载实例代码  # springMVC配置环境实现文件上传和下载  # 在SpringMVC框架下实现文件的上传和下载示例  # SpringMVC下实现Excel文件上传下载  # SpringMVC框架实现图片上传与下载  # SpringMVC实现文件上传和下载功能  # SpringMVC实现文件上传和下载的工具类  # SpringMVC实现上传下载文件  # 上传文件  # 说了  # 要有  # 不多  # 很久  # 这是我  # 不存在  # 此类  # 请选择  # 实际情况  # 我找  # 大家分享  # 解决办法  # 数据库中  # 可以下载  # 具体内容  # 大家多多  # 新建一个  # 重命名 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  如何注册花生壳免费域名并搭建个人网站?  JavaScript如何实现音频处理_Web Audio API如何工作?  网站制作企业,网站的banner和导航栏是指什么?  如何用美橙互联一键搭建多站合一网站?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  使用Dockerfile构建java web环境  Swift开发中switch语句值绑定模式  网站建设要注意的标准 促进网站用户好感度!  如何在阿里云域名上完成建站全流程?  如何快速登录WAP自助建站平台?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel如何实现模型的全局作用域?(Global Scope示例)  如何为不同团队 ID 动态生成多个独立按钮  如何在阿里云香港服务器快速搭建网站?  如何快速查询网站的真实建站时间?  如何用搬瓦工VPS快速搭建个人网站?  Android 常见的图片加载框架详细介绍  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Linux后台任务运行方法_nohup与&使用技巧【技巧】  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  教你用AI润色文章,让你的文字表达更专业  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  北京网站制作的公司有哪些,北京白云观官方网站?  如何破解联通资金短缺导致的基站建设难题?  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  独立制作一个网站多少钱,建立网站需要花多少钱?  C语言设计一个闪闪的圣诞树  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  教学论文网站制作软件有哪些,写论文用什么软件 ?  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  Bootstrap整体框架之JavaScript插件架构  潮流网站制作头像软件下载,适合母子的网名有哪些?  javascript读取文本节点方法小结  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  魔方云NAT建站如何实现端口转发?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  做企业网站制作流程,企业网站制作基本流程有哪些?  如何在 Pandas 中基于一列条件计算另一列的分组均值