`
webdev2014
  • 浏览: 709578 次
文章分类
社区版块
存档分类
最新评论

fileloder.js+struts2实现文件异步上传,无页面刷新效果。

 
阅读更多

一、前言

  之前在写一个web的文件上传的功能时,希望在web前端对文件的大小,及类型用js给验证掉,然后提交到服务器保存入数据库,同时要求达到页面无刷新的异步效果。在网上也看到有很多用iframe的方式实现了这样的无刷新效果。不过我在这里给大家介绍的是一款js插件,非常强大。在用这款插件前,在网上查询了好久关于js对文件类型的验证,当然这样的方法很多,大多数通过正则表达式对文件后缀验证的方式,只不过对文件大小验证这项功能上网上贴出的大多数代码都不靠谱,很多浏览器根本就不支持很多属性操作,比喻说filesize这项,而且浏览器的兼容性上考虑起来非常麻烦。不过所幸后来我找到了fileloader.js这个插件,前身好像是ajaxfileupload.js,这款插件可通过js提交验证文件的大小及类型、支持拖拽上传。有时间把它的源码研究下也跟大家分享下。fileloader.js官方地址是:http://fineuploader.com/。当然上面也有很多DEMO,大家可以自己去看。

二、工作准备

  添加strut2框架;将下载的fileloader.js的文件添加到页面;将fileloader.css文件添加到页面;添加jquery包

三、HTML页面代码

<html>

<head>

<title>文件上传</title>

<link href="css/fileuploader.css" rel="stylesheet" type="text/css" />

  <script language="javascript" type="text/javascript" src="js/jquery-1.8.0.js"></script>

  <script language="javascript" type="text/javascript" src="js/fileuploader.js"></script>
  <script language="javascript" type="text/javascript">

    $(document).ready(function() {
        var thumbnailuploader = new qq.FileUploader({      //new fileuploader object
          element: $('#thumbnail-fine-uploader')[0],      //选定页面div元素,这里用了jquery的选择器
          action: 'service/uploadImage',            //提交的action地址
          debug: true,
          multiple: false,
          allowedExtensions: ['jpeg', 'jpg', 'gif', 'png'],  //允许上传的文件类型
          sizeLimit: 500*1024,                //允许上传文件的大小,这里是500KB,500kb = 500*1024KB
          uploadButtonText:'图片上传',            //在页面显示上传按钮
          inputName: 'myFile',                //在input标签中的name属性设置为myFile
          messages:{                     //设置的提示信息,包括大小类型等的操作
              typeError:'只允许jpeg,jpg,gif,png格式的图片文件{file}',
              sizeError:'文件大小不能超过{sizeLimit}。{file}',
              emptyError:'文件不可为空{file}',
              onLeave:'文件正在上传,离开将终止上传操作?'
          },
          showMessage:function(message){          //显示信息
            alert(message);
          },
          failedUploadTextDisplay: {            //设置返回从服务器反馈的error信息,不过我这里利用这个responseProperty属性反馈msg信息,具体的msg内容在服务中设置。
            mode: 'custom',
            maxChars: 40,
            responseProperty: 'msg',
            enableTooltip: true
        }

       });
    })  

  </scripte>

</head>

<body>

     <fieldset>
           <legend><span>您可以上传一张不超过500kb的图片</span></legend>
            <div>
                   <div id="thumbnail-fine-uploader"></div>  
             </div>
    </fieldset>

</body>

</html>

三、Action服务器端代码

提示:我在项目中使用了S2SH框架,所以注意下自己写代码时候的区别

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.hibernate.Hibernate;

import com.byg.entity.TableMsgService;
import com.byg.service.SendMessageService;

public class FileHandleAction extends SessionAction{
    
    private SendMessageService service;
    
    public void setService(SendMessageService service) {
        this.service = service;
    }

    private String myFile;        //myFile属性,即刚才在声明fileuploader 对象时候设置的myFile属性。通过此属性接收file的Name
    
    public String getMyFile() {
        return myFile;
    }
    public void setMyFile(String myFile) {
        this.myFile = myFile;
    }
    
    private String msg;         //用于返回json数据,即在刚才在fileuploader对象中的failedUploadTextDisplay 中设置的responseProperty属性,显示msg的信息
    
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    //check file size
    /**
     * upload image
     */
    public String uploadImage(){
    
        HttpServletRequest request = ServletActionContext.getRequest();          //声明request对象用于获取文件流
        
        if(this.getMyFile()!=null){        //如果图片名不为空    
            
            File myFile = new File(this.getMyFile());  //用改文件名new 一个文件对象
                    
            try {
                    InputStream is = request.getInputStream();    //获取文件流
                    FileOutputStream fout = new FileOutputStream(myFile);//定义文件输出流
                
                    byte b[] = new byte[1000];
                    
                    int n ;
                    
                    while((n=is.read(b))!=-1){          //从inputStream中把获取的文件流写入这个新new的文件对象中
                        
                        fout.write(b,0,n);
                    }
                    is.close();
                    fout.flush();
                    fout.close();
                    FileInputStream in = new FileInputStream(myFile);    //我的Image对象的定义是Blob类型,所以这里我通过进一步的转化myFile
                    TableMsgService msgService = new TableMsgService();                        
                    msgService.setImage(Hibernate.createBlob(in));        //通过Hibernate的createBlob方法转化,然后设置我的image属性
                    service.save(msgService);    //save this object;     //最后保存包含这个Blob类型数据的对象,用的Hibernate框架
                                 
                    msg = "文件"+this.getMyFile()+"上传成功";        //msg 设置显示成功
                    
            }catch(Exception e) {
                msg = "文件"+this.getMyFile()+"上传失败";          //如果异常 设置msg显示失败
                e.printStackTrace();
            }
        }
            
        return "succ";
            
    }
    

}

三、Struts.xml的配置

<struts>
    <constant name="struts.il8n.encoding" value="utf-8"></constant>

    <package name="test" extends="json-default" namespace="/service">

          <action name="uploadImage" class="fileHandleAction" method="uploadImage">  //我这里写的是spring配置的Action
            <result name="succ" type="json"/>        //返回json数据,即msg属性的信息
        </action>
    </package>
</struts>

四、结语

  fileuploader.js这款插件还是很是强大的,支持进度条的显示,也可以自定义气样式,不过目前我还是没有了解很透这款插件。有时间好好琢磨。希望这篇文章可以对大家有需要的分享下。





分享到:
评论

相关推荐

    Extjs+Struts2实现异步文件上传

    网上有些这样的例子,但是下了几个都没有跑起来,哎,希望那些发文章的人要发就发全的,别发个半生不熟的。... 现在自己整理了一个Struts2+ExtJS2实现文异步文件上传,没法上传图片无法看到效果,直接上源码吧。

    jquery+struts2实现异步刷新锁需要的包

    标题中的"jquery+struts2实现异步刷新锁需要的包"表明我们需要的是一套特定的依赖包,用于整合jQuery和Struts2来实现在服务器端控制异步更新的逻辑。这通常涉及到以下组件: 1. **jQuery库**:这是JavaScript的一个...

    jquery+struts2实现异步刷新实例

    本实例将详细讲解如何利用jQuery库与Struts2框架结合,实现异步刷新功能。jQuery以其简洁易用的API深受开发者喜爱,而Struts2作为Java Web开发中的MVC框架,提供了丰富的动作和结果类型,便于构建动态网站。 首先,...

    struts2+jquery+ajax文件异步上传

    Struts2、jQuery和Ajax是Web开发中的三个关键组件,它们共同构成了文件异步上传的基础框架。这个项目是在MyEclipse环境下实现的一个简单的文件上传功能,让我们深入了解一下这些技术及其在文件上传中的应用。 首先...

    swfuplaod+struts2实现多文件上传

    下面将详细介绍如何利用SWFUpload与Struts2来实现多文件上传。 **一、SWFUpload组件介绍** SWFUpload 是一个JavaScript库,它利用Flash技术提供了一个高级的文件上传体验。它的主要特性包括: 1. **多文件选择**...

    jquery.uploadify+Struts2整合配置

    在IT领域,jQuery Uploadify与Struts2的整合是一个常见的前端文件上传解决方案。这个整合能够为Web应用提供高效、用户友好的文件上传功能。现在,我们来深入探讨这个主题。 首先,jQuery是一个轻量级、高性能的...

    struts2+ajax+jquery异步批量上传超大文件.zip

    struts2+ajax+jquery异步批量上传超大文件.zip struts2+ajax+jquery异步批量上传超大文件.zip struts2+ajax+jquery异步批量上传超大文件.zip struts2+ajax+jquery异步批量上传超大文件.zip struts2+ajax+jquery异步...

    jquery+struts2实现文件上传

    jQuery是一个轻量级的JavaScript库,提供了丰富的交互效果和API,而Struts2是Java企业级开发中广泛使用的MVC框架,它提供了一套完善的文件上传机制。 首先,我们需要确保在项目中引入了Struts2的核心库。根据描述,...

    Android+struts2实现图片上传

    本教程将探讨如何通过集成Struts2框架在Java后端实现Android客户端的图片上传功能。首先,我们需要了解Android客户端的文件操作以及如何使用HTTP请求将数据发送到服务器。 在Android客户端,我们通常使用`Intent`来...

    jsp+JavaScript+struts+hibernate+css+mysql的网上书店

    【标题】"jsp+JavaScript+struts+hibernate+css+mysql的网上书店"是一个基于Java技术栈的Web应用程序示例,它整合了多种技术来实现一个完整的网上书店系统。这个项目涉及到的主要技术包括: 1. **JSP(JavaServer ...

    Struts2+Jquery+Ajax

    在Struts2中,Jquery可以与Ajax结合使用,实现页面的无刷新更新。 Ajax(Asynchronous JavaScript and XML)技术允许前端与后台进行异步通信,无需整个页面刷新,提高了用户体验。在Struts2框架下,我们可以使用...

    jsp+struts文件上传

    在本文中,我们将深入探讨如何使用JSP(JavaServer Pages)和Struts框架实现文件上传功能。这是一个在Web开发中常见的需求,特别是在处理用户提交的数据时。Struts是一个基于MVC(Model-View-Controller)设计模式的...

    Uploadify + Struts2 实现文件上传详解

    【Uploadify + Struts2 实现文件上传详解】 在Web开发中,文件上传是一个常见的功能需求,尤其是在内容管理系统、论坛或者其他需要用户提交图片、文档等资料的场景。Uploadify是一款基于jQuery的文件上传插件,它...

    SSH action+struts.xml+jsp

    在这个场景中,"SSH action+struts.xml+jsp" 指的是在SSH框架下,Struts2的动作(Action)类、配置文件Struts2的XML配置(struts.xml)以及JSP视图页面的整合应用。 **Spring框架** 是一个全面的后端应用程序框架,...

    struts2+ajax+jquery异步批量上传超大文件

    struts2+ajax+jquery异步批量上传超大文件,单文件最大支持2G,一次文件数量,文件大小都可设置。简单明了。绝对可用,稍微懂点的就可以修改为自己所用。你值得拥有! 我会分享给大家更多更好的东西,希望支持!

    spring+struts+hibernate实现文件的上传和下载

    【Spring+Struts+Hibernate 实现文件上传和下载】 在 J2EE 开发中,文件的上传和下载是一项基础但重要的功能。SSH(Struts、Spring、Hibernate)框架提供了便捷的方式来处理这一问题,无需依赖像 SmartUpload 或 ...

    ajaxFileUpload+struts2实现多文件上传(源码)

    首先,`ajaxFileUpload`是一个基于JavaScript的插件,它允许异步文件上传,利用Ajax技术实现与服务器端的数据交换,这样用户在上传文件时不会感到页面的刷新,提高了交互性。该插件通常与jQuery库一起使用,因为它...

    hibernate+struts2实现添删改查

    在实际项目中,前端通常会与Struts2的Action进行交互,通过Ajax请求实现异步的添删改查操作,提升用户体验。 总的来说,"Hibernate+Struts2"的组合提供了强大的Web应用开发能力,通过合理的配置和编程,可以构建出...

    ajaxFileUpload+struts2实现多文件上传(动态添加文件上传框)

    ajaxFileUpload+struts2实现多文件上传(动态添加文件上传框)(项目源码) 博文地址:http://blog.csdn.net/itmyhome1990/article/details/36433621

    整合jquery+json+struts2异步提交实例

    在IT行业中,异步传输是Web开发中的一个重要概念,它极大地提升了用户体验,使得用户无需等待整个页面刷新即可获取和更新数据。在这个实例中,“整合jquery+json+struts2异步提交”是一个典型的前端与后端交互的示例...

Global site tag (gtag.js) - Google Analytics