• ajax fileupload上传组件的使用感悟


    最近给公司开发项目中,一直在做一个上传功能,在做这个功能中对上传组件的使用感触挺深的。

    我最早使用的一款上传组件是fileupload,不是struts的,是servlet的,它是在serlvet中使用的,在后台要写好多好多的代码,感觉那个太繁琐了,之后又使用了swf上传组件,这个组件的上传功能是在前台实现的,在前台就可以实现上传而且还可以实现动态上传的进度条,给人的视觉感觉很不错。但是,它是将flash和js封装在一起的,由于要先前台实现上传,所以很多东西写的比较复杂,想要掌握它并熟悉它需要花费大量的时间去研究它,而且很难把握住,出了问题也不好调试。。。。

    最终在我尝试好多的上传组件中,我选择了fileupload上传组件。首先是前台它是用jquery和ajax实现的,大家先可以看一下前台代码:

    function ajaxFileUpload()
        {
           
            $("#loading")
            .ajaxStart(function(){
                $(this).show();
            })//开始上传文件时显示一个图片
            .ajaxComplete(function(){
                $(this).hide();
            });//文件上传完成将图片隐藏起来
           
            $.ajaxFileUpload
            (
                {
                    url:'fileUploadAction.action',//用于文件上传的服务器端请求地址
                    secureuri:false,//一般设置为false
                    fileElementId:'file',//文件上传空间的id属性  <input type="file" id="file" name="file" />
                    dataType: 'json',//返回值类型 一般设置为json
                    success: function (data, status)  //服务器成功响应处理函数
                    {
                        alert(data.message);//从服务器返回的json中取出message中的数据,其中message为在struts2中定义的成员变量
                       
                        if(typeof(data.error) != 'undefined')
                        {
                            if(data.error != '')
                            {
                                alert(data.error);
                            }else
                            {
                                alert(data.message);
                            }
                        }
                    },
                    error: function (data, status, e)//服务器响应失败处理函数
                    {
                        alert(e);
                    }
                }
            )
           
            return false;

        }

    这是ajax的方法写的组件中的方法,前台只需写一个简单的input的text框和一个简单的buttton按钮,然后通过jquery调用就可以实现。

    然后给大家看一下后台代码:


        String path = ServletActionContext.getRequest().getRealPath("/upload");

        try {
            File f = this.getFile();
            if(this.getFileFileName().endsWith(".exe")){
                message="对不起,你上传的文件格式不允许!!!";
                return ERROR;
            }
            FileInputStream inputStream = new FileInputStream(f);
            FileOutputStream outputStream = new FileOutputStream(path + "/"+ this.getFileFileName());
            byte[] buf = new byte[1024];
            int length = 0;
            while ((length = inputStream.read(buf)) != -1) {
                outputStream.write(buf, 0, length);
            }
            inputStream.close();
            outputStream.flush();
        } catch (Exception e) {
            e.printStackTrace();
            message = "对不起,文件上传失败了!!!!";
        }
        return SUCCESS;
    }

    后台只需要一个简单的输入输出流就可以实现,将你要上传的文件通过前台的ajax提交到对应的action类。是不是很简单?比起很多方法它要简单的多,类型除了.exe的文件都可以上传。但是使用的过程是要注意一点,使用的时候,要注意它也是基于struts的基础上来实现的,所以再你使用这个组件之前你得搭配好struts 2的配置环境,而且jar包何总必须有struts2-json-puligun.jar这个包,大家使用的时候一定要多注意。

  • 相关阅读:
    小白必读:闲话HTTP短连接中的Session和Token
    网络编程懒人入门(六):深入浅出,全面理解HTTP协议
    IM系统的MQ消息中间件选型:Kafka还是RabbitMQ?
    致我们再也回不去的 Github ...
    了不起的WebRTC:生态日趋完善,或将实时音视频技术白菜化
    网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门
    盘点微信的前世今生,微信成功的必然和偶然
    微信七年回顾:历经多少质疑和差评,才配拥有今天的强大
    写给小白的实时音视频技术入门提纲
    jenkins使用jacoco插件检测代码覆盖率(八)
  • 原文地址:https://www.cnblogs.com/shunxiyuan/p/2302607.html
Copyright © 2020-2023  润新知