zoukankan      html  css  js  c++  java
  • jsp页面附件上传暂存的处理

    有没有遇到页面是新建一个新对象,对象里面需要上传附件,但是只有当对象保存时才将附件一同上传到数据库的情况?

    这种情况的处理可以参考狐狸的思路:

    @jsp页面创建一个botton bn,该button的实现用ExtJS实现。

    @ExtJS用 form.form.submit()实现把文件附件上传到服务器本地,同时将文件的路径fileName和其它的对象信息通过JSONObject从后台   Sevlet传到到前台。

       前台ExtJS:先将后台传递过来的JSONObject转换为JSON,然后用js的DOM操作渲染到JSP页面的input中,实现局部刷新。

     form.form.submit({
             url : '/PolicyPackage?tg=uploadPolicyAtt&nbbm='+nbbm+"&fileName="+fileName,
             method : 'POST',
             waitMsg: '正在上传...',
             success : function() {
                    function(form, result) {//表单提交成功后,调用的函数.参数分为两个,一个是提交的表单对象,另一个是JSP返回的参数值对象  
                           Ext.Msg.alert('Message','上传成功!');
                           //alert(result.response.responseText); //返回的json值的字符串
                           var json = Ext.util.JSON.decode(result.response.responseText); //用JSON对象获取JSON数据的值
                            //将返回的值渲染到jsp的INPUT
                           document.getElementById("attNBBM").value=json.attNBBM;//政策附件内部编码
                            document.getElementById("attName").value =json.attName;//附件名称
                           document.getElementById("attName").innerHTML =json.attName;//附件名称
                            win.close();
                    },
                   failure : function() {
                            Ext.Msg.alert('Error','上传失败.');
                    }
    });

    ======================================================================

    若这里是Ext.Ajax.request(后台都是添加到JSONObject,由response.getWriter输出)

        Ext.Ajax.request({
                                                url: '/PolicyPackage',
                                                params: { tg:'delPolicyAtta', nbbm: this.get("nbbm") },
                                                method: 'POST',
                                                success: function (response) {
                                                    store.load({params:{
                                                         start:0,limit:15
                                                     }});
                                                    Ext.MessageBox.alert('成功', '附件删除成功');
                                                     var json = Ext.util.JSON.decode(response.responseText);
                                                    var tempNBBM = document.getElementById("attNBBM").value;
                                                     var newNBBM = tempNBBM .replace(("'"+json.nbbm+"',"),"");
                                                     document.getElementById("attNBBM").value=newNBBM;
                                                },
                                                failure: function (response) {
                                                    Ext.MessageBox.alert('失败', '附件删除失败');
                                                }
                                         })

    区别在红色标注部分

    @ JSP页面使用隐藏的input表单,可以获取ExtJS返回的json数据

    @ 最后提交表单的时候传递到后台进行其它信息的保存与处理

        由于文件是暂存在服务器本地的,所以当提交表单的时候要处理:

        1、将服务器本地临时文件上传到服务器,并且删除临时文件

        2、当对象不保存即表单不保存时删除临时文件

    ===============================================================================

    但是这种模式仅仅适合用户不需要查看上传附件的情况,如果客户需要查看附件,这不能这么处理。

    考虑下列做法:

    将文件直接上传到数据库,表单不保存的时候删除数据库的文件。

    上面这些是将附件放到数据库中的,但是也有大部分是将附件连接放到数据库中,但是文件放在服务器本地。

    这种情况的处理就简单多了。但是人家客户这么要求整个文件放在数据库中,狐狸也只能想到这么做了。

  • 相关阅读:
    用DD-WRT自建计费WiFi热点
    docker安全最佳实践概述
    2014年8月25日,收藏家和杀手——面向对象的C++和C(一)
    Maven
    做QA的日子——iOS測试入门(四)
    小贝_mysql select连接查询
    FFmpeg源码简单分析:结构体成员管理系统-AVOption
    Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享
    Redis主从配置及通过Keepalived实现Redis自动切换高可用
    CentOS 安装jdk1.7 32位
  • 原文地址:https://www.cnblogs.com/zhutouying/p/3229285.html
Copyright © 2011-2022 走看看