热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java文件上传下载基于ajaxFileUpload+struts2

jQuery插件ajaxFileUpload可以实现ajax文件上传,使用非常简单。下面做一个简单的demo(以上传图片为例),实现图片上传,图片显示,图片下载注:以下的代码是在项

jQuery插件ajaxFileUpload可以实现ajax文件上传,使用非常简单。

下面做一个简单的demo(以上传图片为例),实现图片上传,图片显示,图片下载

注:以下的代码是在项目的基础上进行开发。css样式文件、包路径等未做修改。

1、 ajaxFileUpload文件下载地址http://www.phpletter.com/Demo/AjaxFileUpload-Demo/

2、自行引入jquery.js、ajaxFileUpload.js文件

jsp核心代码:

[html] view plaincopy
  1. <script type="text/Javascript">  
  2.   function fileUpload() {  
  3.     $.ajaxFileUpload( {  
  4.         url : ‘admin/fileAction.do‘,//用于文件上传的服务器端请求地址  
  5.         secureuri : false,          //一般设置为false  
  6.         fileElementId : ‘file‘,     //文件上传空间的id属性  <input type="file" id="file" name="file" />  
  7.         dataType : ‘json‘,          //返回值类型 一般设置为json  
  8.         success : function(data, status) {  
  9.             $("#downImg").show();   //待上传成功后 显示下载按钮  
  10.             $("#downImg").attr("href","admin/downloadImage.do?filePath="+data.filePath);  
  11.             $("#showImg").attr("src","admin/redImage.do?path=" + data.filePath);  
  12.         }  
  13.     })  
  14.   }  
  15. script>  
  16. <table class="editTable">  
  17.    <tr>  
  18.     <td colspan="4">  
  19.         <img id="showImg" alt="" src="">  
  20.         <id="downImg" attribute-value">"display: none" href="">下载a>   
  21.     td>  
  22.    tr>  
  23.    <tr>  
  24.     <td class="title">  
  25.         上传图片:  
  26.     td>  
  27.     <td colspan="3">  
  28.         <input type="file" id="file" name="file" Onchange="fileUpload();">  
  29.     td>  
  30.    tr>  
  31. table>  


3、AjaxFileUploadAction

[java] view plaincopy
  1. public class AjaxFileUploadAction extends WebSupport {  
  2.   
  3.     private File file;            //文件  
  4.     private String fileFileName;  //文件名   
  5.     private String filePath;      //文件路径  
  6.     private InputStream inputStream;  
  7.   
  8.     /** 
  9.      * 图片上传 
  10.      *  
  11.      * @return 
  12.      */  
  13.     public String fileUpload() {  
  14.         String path = ServletActionContext.getServletContext().getRealPath("/upload");  
  15.         File file = new File(path); // 判断文件夹是否存在,如果不存在则创建文件夹  
  16.         if (!file.exists()) {  
  17.             file.mkdir();  
  18.         }  
  19.         try {  
  20.           if (this.file != null) {  
  21.             File f = this.getFile();  
  22.             String fileName = java.util.UUID.randomUUID().toString(); // 采用时间+UUID的方式随即命名  
  23.             String name = fileName+ fileFileName.substring(fileFileName.lastIndexOf(".")); // 保存在硬盘中的文件名  
  24.   
  25.             FileInputStream inputStream = new FileInputStream(f);  
  26.             FileOutputStream outputStream = new FileOutputStream(path+ "\\" + name);  
  27.             byte[] buf = new byte[1024];  
  28.             int length = 0;  
  29.             while ((length = inputStream.read(buf)) != -1) {  
  30.                 outputStream.write(buf, 0, length);  
  31.             }  
  32.             inputStream.close();  
  33.             outputStream.flush();  
  34.             //文件保存的完整路径  比如:D:\tomcat6\webapps\eserver\\upload\a0be14a1-f99e-4239-b54c-b37c3083134a.png  
  35.             filePath = path+"\\"+name;  
  36.   
  37.           }  
  38.         } catch (Exception e) {  
  39.             e.printStackTrace();  
  40.         }  
  41.         return SUCCESS;  
  42.     }  
  43.   
  44.     /** 
  45.      * 用于图片页面显示 
  46.      *  
  47.      * @return 
  48.      */  
  49.     public String readImg() {  
  50.         try {  
  51.             inputStream = new FileInputStream(new File(getRequest().getParameter("path")));  
  52.         } catch (FileNotFoundException e) {  
  53.             e.printStackTrace();  
  54.         }  
  55.         return SUCCESS;  
  56.     }  
  57.     /** 
  58.      * 图片下载 
  59.      * @return 
  60.      */  
  61.     public String download() {  
  62.         String path = filePath;  
  63.         HttpServletResponse response = ServletActionContext.getResponse();  
  64.         try {  
  65.             // path是指欲下载的文件的路径。  
  66.             File file = new File(path);  
  67.             // 取得文件名。  
  68.             String filename = file.getName();  
  69.             // 取得文件的后缀名。  
  70.             String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();  
  71.             // 以流的形式下载文件。  
  72.             InputStream fis = new BufferedInputStream(new FileInputStream(path));  
  73.             byte[] buffer = new byte[fis.available()];  
  74.             fis.read(buffer);  
  75.             fis.close();  
  76.             //清空response  
  77.             response.reset();  
  78.             //设置response的Header  
  79.             String filenameString = new String(filename.getBytes("gbk"),"iso-8859-1");  
  80.             response.addHeader("Content-Disposition", "attachment;filename=" + filenameString);  
  81.             response.addHeader("Content-Length", "" + file.length());  
  82.             OutputStream toClient = new BufferedOutputStream(response.getOutputStream());  
  83.             response.setContentType("application/octet-stream");  
  84.             toClient.write(buffer);  
  85.             toClient.flush();  
  86.             toClient.close();  
  87.         } catch (IOException ex) {  
  88.             ex.printStackTrace();  
  89.         }  
  90.         return null;  
  91.     }  
  92.   
  93.     public File getFile() {  
  94.         return file;  
  95.     }  
  96.   
  97.     public void setFile(File file) {  
  98.         this.file = file;  
  99.     }  
  100.   
  101.     public String getFileFileName() {  
  102.         return fileFileName;  
  103.     }  
  104.   
  105.     public void setFileFileName(String fileFileName) {  
  106.         this.fileFileName = fileFileName;  
  107.     }  
  108.   
  109.     public String getFilePath() {  
  110.         return filePath;  
  111.     }  
  112.   
  113.     public void setFilePath(String filePath) {  
  114.         this.filePath = filePath;  
  115.     }  
  116.   
  117.     public InputStream getInputStream() {  
  118.         return inputStream;  
  119.     }  
  120.   
  121.     public void setInputStream(InputStream inputStream) {  
  122.         this.inputStream = inputStream;  
  123.     }  
  124.   
  125.     private static final Logger log = Logger  
  126.             .getLogger(AjaxFileUploadAction.class);  
  127.     private static final long serialVersionUID = 1L;  
  128. }  


4、struts配置

[html] view plaincopy
    1. <struts>   
    2.    <package name="struts_Ajax_code" extends="json-default">   
    3.            
    4.        <action name="fileAction" class="com.bk.eserver.web.action.AjaxFileUploadAction" method="fileUpload">   
    5.             <result type="json" name="success">   
    6.                  <param name="contentType">text/htmlparam>   
    7.             result>   
    8.        action>   
    9.    package>    
    10.    <package name="struts_Jsp_code" extends="struts-default">   
    11.            
    12.        <action name="redImage" class="com.bk.eserver.web.action.AjaxFileUploadAction" method="readImg">   
    13.             <result type="stream">   
    14.                  <param name="contentType">application/octet-streamparam>    
    15.                  <param name="inputName">inputStreamparam>    
    16.                  <param name="contentDisposition">attachment;filename=${fileName}param>    
    17.                  <param name="bufferSize">4096param>   
    18.             result>   
    19.        action>    
    20.            
    21.        <action name="downloadImage" class="com.bk.eserver.web.action.AjaxFileUploadAction" method="download">   
    22.             <result type="stream">   
    23.                  <param name="contentType">application/octet-streamparam>    
    24.                  <param name="inputName">inputStreamparam>    
    25.                  <param name="contentDisposition">attachment;filename=${fileName}param>    
    26.                  <param name="bufferSize">4096param>   
    27.             result>   
    28.        action>   
    29.    package>   
    30. struts

java 文件上传下载--基于ajaxFileUpload+struts2


推荐阅读
  • 本文介绍了一种使用CSS3和jQuery实现的35款SVG图标加载动画。这些动画不仅视觉效果出色,还能提升用户体验。通过本文,您可以了解如何在项目中应用这些动画。 ... [详细]
  • 本文介绍了如何使用Postman构建和发送HTTP请求,包括四个主要部分:方法(Method)、URL、头部(Headers)和主体(Body)。特别强调了Body部分的重要性,并详细说明了不同类型的请求体。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 第七卷《英才》强调,即使有良药,若不对症,效果也不如低等药物;即使有贤才,若不适用,效果也不如普通人。文中通过多个比喻,阐述了人才使用的重要性,指出合适的人才在适当的时间和场合才能发挥最大效用。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • 近日,我在处理一个复杂的前端问题时遇到了极大困扰。具体来说,我之前开发了一个功能丰富的纯jQuery代码的前端GridView控件,实现了多种功能和视觉效果,并在多个项目中表现良好。然而,最近在尝试应用 `border-box` 布局模式时,却遇到了意想不到的兼容性和性能问题。这提醒我们在条件尚未完全成熟的情况下,应谨慎使用 `border-box` 布局模式,以免引入不必要的复杂性和潜在的bug。 ... [详细]
  • 为开发者提供了一系列实用的参考网站和资源链接,包括HTML速查手册( 和 ),帮助开发者快速查找和学习相关技术知识。此外,还涵盖了其他重要的开发工具和文档,为编程工作提供全面支持。 ... [详细]
  • 在React中使用setState时遇到错误,本文将详细分析错误原因并提供解决方案。 ... [详细]
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 本文全面解析了JavaScript中的DOM操作,并提供了详细的实践指南。DOM节点(Node)通常代表一个标签、文本或HTML属性,每个节点都具有一个nodeType属性,用于标识其类型。文章深入探讨了DOM节点的创建、查询、修改和删除等操作,结合实际案例,帮助读者更好地理解和掌握DOM编程技术。 ... [详细]
author-avatar
李国龙度_476
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有