2.火狐浏览器上,uploadify文件上传不兼容,和session重新发起的问题

前段时间做表单中有文件上传的功能,主要是因为用uploadify上传,发生了问题:

问题描述1:用uploadify实现文件上传时,遇到在火狐上不兼容问题,uploadify样式无法加载的问题,这个简单,直接在火狐浏览器上安装flash插件就可以了解决,

问题描述2:使用uploadify上传文件时,发现上传文件的session(以下就叫file_session)和提交表单的session(sub_session)不一样。在提交表单的Action中我们想要获取之前的请求在session设置的值时,获取到的都是null,因为两次请求的session已经不一样了。(chrome,ie请求的sessionid是一样的)

解决思路:因此我们肯定也无法在提交表单的Action里面获取到上传文件时候session里面的数据了。那么就只能通过把file_session的sessionid传到表单提交的请求里面,然后通过file_sessionid去获取file_session并取到里面的数据。

1.首先我们需要通过sessionid获取session的方法,因为Servlet2.1之后不支持SessionContext里面getSession(String id)方法。so,看我的上一篇去,这就不重复写了。

上代码

jsp文件上传:

        var sid;//图片上传临时文件成功后返回的sessionid
         $("#uploadify").uploadify({
            ‘swf‘ : ‘<%=basePath%>/Backstage/Style/jQuery-uploadify/uploadify.swf?time=‘+Math.random(),
            // ‘script‘ : ‘ProductAction!fileUpload.do‘,//后台处理的请求
            ‘uploader‘: ‘AppVersionAction!fileUpload.do‘ ,
            ‘cancelImg‘ : ‘<%=basePath%>/Backstage/include/easyvalidator/images/vtip_arrow.png‘,
           ‘formData‘:{‘ASPSESSID‘:sessionid},
            ‘folder‘ : ‘/uplaod/temp‘,//您想将文件保存到的路径
            ‘queueID‘ : ‘fileQueue‘,//与下面的id对应
            ‘fileObjName‘:‘uploadify‘,
            ‘queueSizeLimit‘ : 5,
            ‘fileDesc‘ : ‘文件格式‘,
            ‘fileTypeExts‘ : ‘*.apk;*.ipa;*.png‘, //控制可上传文件的扩展名,启用本项时需同时声明fileDesc
            ‘auto‘ : false,
            ‘simUploadLimit‘ : 2,
            ‘buttonText‘ : ‘选择文件‘,
            ‘onQueueComplete‘ : function(file,data,response) {
            },
            ‘onUploadSuccess‘:function(file,data,response){
                sid=data;//获取文件上传后传到页面的sessionid
           }
        }); 

jsp表单提交:

    //提交处理
    function toSubmit(){
        //验证全部通过,提交表单
        if($("#moduleform").form("validate")){
            etc.submitForm(‘/AppVersionAction!modVersion.do?sessionid=‘+sid,‘1‘);//这样就可以在表单提交的时候将文件上传时的sessionid传到提交的请求中
        }

    }

Action中,文件上传方法:

public void fileUpload() throws Exception {
        UploadImg uploadImg = new UploadImg();
        List<String> files;
        System.out.println("##fileUpload-   sessionid:"+getRequest().getSession().getId());
        if (getSession().getAttribute("files") != null) {
            files = (List<String>) getSession().getAttribute("files");
        } else {
            files = new ArrayList<String>();
        }
        for (int i = 0; i < uploadify.length; i++) {
            // 存入文件缓存目录
            String returnURL = uploadImg.getUploadImgSaveUrl(getRequest(), uploadify[i], uploadify[i].getName(), "/Upload/temp");
            files.add(returnURL.substring(returnURL.lastIndexOf("/"), returnURL.length()));
        }

        if(files!=null){
            getSession().setAttribute("uploadifyFileName", uploadifyFileName);
        }

        getSession().setAttribute("files", files);
        System.out.println("#### filename session:  "+getSession().getAttribute("fileName1"));
        // 封装成JSON格式返回页面
        String json = JSON.toJSONString(uploadify);
        getResponse().setContentType("text/html;charset=utf-8");// 设置输出流格式,编码为utf-8
        getResponse().getWriter().println(getRequest().getSession().getId());// 在这主要将文件上传这边的session传到表单提交页面。
    }

Action中表单提交的方法:

public void modVersion() {

        UploadImg uploadImg=new UploadImg();

        String sessionId =getRequest().getParameter("sessionid");
        System.out.println(" mod  sid:  "+sessionId);
        HttpSession session = MySessionContext.getSession(sessionId);//获取fileupload文件时的session,进而获取临时文件信息,在上一篇文章中有对应代码
        List<String> files = (List<String>) session.getAttribute("files");//这里我们就可以获取在fileUplad()的请求时session。
        try {
            。。。//代码就省了,主要是要说session获取的问题
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
时间: 2024-12-19 15:17:18

2.火狐浏览器上,uploadify文件上传不兼容,和session重新发起的问题的相关文章

jQuery.uploadify文件上传组件实例讲解

1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好,无刷新,带上传进度等等.在最近的短信平台开发中,使用Uploadify进行文件上传. Uploadify官网地址是:http://www.uploadify.com/ 可满足项目开发需求. 下载地址:http://www.uploadify.com/wp-content/uploads/files/

详解jQuery uploadify文件上传插件的使用方法

uploadify这个插件是基于js里面的jquery库写的.结合了ajax和flash,实现了这个多线程上传的功能. 现在最新版为3.2.1. 在线实例 实例中用到的php文件UploaderDemo.php请在页面下方下载 引入文件 <link rel="stylesheet" type="text/css" href="uploadify.css" /> <script type="text/javascript

jQuery uploadify 文件上传

uploadify这个插件是基于js里面的jquery库写的.结合了ajax和flash,实现了这个多线程上传的功能.现在最新版为3.2.1. 在线实例 实例预览 Uploadify 在线实例Demo演示 实例中用到的php文件UploaderDemo.php请在页面下方下载 引入文件 <link rel="stylesheet" type="text/css" href="uploadify.css" /> <script t

记录-Jquery uploadify文件上传实例

原本做的是from表单的文件上传,后来因需要用ajax异步,so接触到了Jquery uploadify上传 贴上代码,以供参考 需要引入的js文件 <link href="../res/uploadify/uploadify.css" rel="stylesheet" type="text/css" /> <script src="../res/uploadify/jquery.uploadify.min.js&qu

结合项目(Spring+(基于注解的)SpringMVC和Mybatis+uploadify文件上传)--poi解析Excel文件

poi解析Excel文件 1.上传文件至服务器 2.解析Excel文件并返回数据集合 3.将数据保存到服务器 框架======Spring+(基于注解的)SpringMVC和Mybatis===== 第一步: 前台: jsp文件采用的是uploadify <div id="fileQueue"></div> <input type="file" id="brandFile"> js: <script ty

实现使用 Git 命令将电脑上的文件上传到 Github

1.在电脑上安装 Windows 版 Git下载地址:https://git-scm.com/downloads2.使用 Git GUI 生成 SSH Key3.将 SSH Key 添加到 Github4.在电脑上创建文件夹,使用 Git Shell 初始化 git init git remote add origin [email protected]:huhaiqng/Oracle.git 5.拉文件 git pull [email protected]:huhaiqng/Oracle.gi

Git 命令将电脑上的文件上传到 Github

1.在电脑上安装 Windows 版 Git下载地址:https://git-scm.com/downloads2.使用 Git GUI 生成 SSH Key 3.将 SSH Key 添加到 Github4.在电脑上创建文件夹,使用 Git Shell 初始化 git init git remote add origin [email protected]:huhaiqng/Oracle.git 5.拉文件 git pull [email protected]:huhaiqng/Oracle.g

火狐浏览器插件(XPI 文件)签名指南

Symantec,Thawte,GlobalSign 签发的代码签名证书都可以签名火狐浏览器插件(XPI)文件.如果您还没有代码签名证书,请联系易维信(EVTrust)购买火狐代码签名证书. 第 1 步:下载有关签名工具 请先到 Mozilla FTP 网站下载最新的网络安全服务包 (Network Security Services ,简称: NSS) : ftp://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/ ,对于 Wind

uploadify文件上传

前端页面上传代码 最简代码 <script type="text/javascript" src="/jquery-1.11.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="/uploadify-3.2.1/uploadify.css" /> <script type=&