zoukankan      html  css  js  c++  java
  • 通过ajax提交表单上传文件

    //这是看的大神的。
    //原地址:https://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html

    $("#sub").click(function(){ $.ajaxFileUpload({ url:'<%=_basePath%>uploadZiZhi', secureuri:false,//是否启用安全机制 fileElementId:'file',//file的id dataType: 'json/text',//返回的类型 success: function (data) {//调用成功时怎么处理 //alert(data) var jo = eval("("+data+")"); alert(jo.name) window.opener.backsPort('<%=inputId%>',data.id,data.name); window.close(); } }); });

    <script src="${pageContext.request.contextPath}/po/js/jquery.js" type="text/javascript"></script>
    <script src="${pageContext.request.contextPath}/po/js/ajaxfileupload.js" type="text/javascript"></script>

     后台代码

    public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            
            System.out.println("上传资质------------");
            Session session= new Session(PoConnection.get());
            String userid = request.getParameter("userid");
            String type = request.getParameter("type");
            if("license".equals(type)){
                //营业执照
                type="1";
            }else if("authorization".equals(type)){
                //委托代理人授权书
                type="2";
            }else if("qualifications".equals(type)){
                //产品或施工资质
                type="3";
            }else if("bankInfo".equals(type)){
                //开户行信息
                type="4";
            }else{
                 throw new RuntimeException("上传失败!");
            }
            //删除原来资质附件
            session.executeUpdate("delete from PO_SRM_INFO_FILE where type='"+type+"'AND FK_SRM="+userid);
             // 1 创建解析器工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            // 1.1 配置上传流在接收时缓冲区的大小 => 默认是10kb
            factory.setSizeThreshold(1024 * 10);
            // 1.2 配置上传时临时文件所在的目录 => 制定一个地址
            // factory.setRepository(new File("e://temp"));
            // 获得java 临时文件所在的目录
            String sysTem = System.getProperty("java.io.tmpdir");
            System.out.println(sysTem);
            // ------------------------------------------------------------------
            // 2 创建解析器
            ServletFileUpload upload = new ServletFileUpload(factory);
            // 2.1 判断当前request对象是否是多段式请求
            if (!upload.isMultipartContent(request)) {
                throw new RuntimeException("您不是多段是请求!");
            }
            // 设置段头使用什么码表编码 => 默认Latin码表
            upload.setHeaderEncoding("utf-8");
            // 设置文件的大小 , 上传时如果超过这个大小会抛出异常
            upload.setFileSizeMax(1024 * 1000*10);// 设置单个上传文件的大小
            upload.setSizeMax(1024 * 1000*10);// 设置单次上传的总文件大小
            // 解析request对象 => 会把多段式中的每一个段都封装成一个FileItem对象
            List<FileItem> list = null;
            try {
                list = upload.parseRequest(request);
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
            // ----------------------------------------------------
            // FileItem 代表多段式提交中每段内容
            StringBuilder idStr = new StringBuilder();
            StringBuilder fileNameStr = new StringBuilder();
           
            PreparedStatement pstmt = null;
            if (list != null) {
                for (FileItem item : list) {
                    if (item.isFormField()) {
                        // 普通表单字段
                        String key = item.getFieldName();// 获得普通表单字段中的键
                        String value = item.getString("Utf-8");// 获得普通表单字段中的值----指定编码解决中文乱码的问题
                    } else {
                        // 文件上传段
                        String fileName = item.getName();
                        if(EcUtil.isEmptyString(fileName)){
                             throw new RuntimeException("未选择文件!");
                        }
                       // System.out.println("上传的文件名称:"+fileName);
                        String filetype = fileName.substring(fileName.lastIndexOf(".")+1);
                        
                        // 获得文件的内容
                        InputStream is = item.getInputStream();
                        
                        //TODO 将数据存入数据库
                        String id = session.queryForColumn(String.class, " SELECT PO_SRM_INFO_FILE_SEQ.NEXTVAL from dual");
                        
                        String sql = "insert into PO_SRM_INFO_FILE(ID,CONTENT,TITLE,OP_TIME,TYPE,DELSTATUS,FK_SRM,FILETYPE) values("+id+",?,?,?,?,?,?,?)";
                        try {
                            
                            ByteArrayOutputStream output = new ByteArrayOutputStream();
                            byte[] buffer = new byte[4096];
                            int n = 0;
                            while (-1 != (n = is.read(buffer))) {
                                output.write(buffer, 0, n);
                            }
                            pstmt = session.currentConnection().prepareStatement(sql);
                            pstmt.setBinaryStream(1, new ByteArrayInputStream(output.toByteArray()),output.toByteArray().length);
                            pstmt.setString(2, fileName);
                            pstmt.setTimestamp(3, new Timestamp(System.currentTimeMillis()));
                            pstmt.setString(4, type);
                            pstmt.setString(5, "0");
                            pstmt.setString(6, userid);
                            pstmt.setString(7, filetype);
                            pstmt.execute();
                        } catch (SQLException e) {
                            e.printStackTrace();
                            session.roolback();
                        }
                        
                        // 关闭流
                        is.close();
                        // 删除临时文件
                        item.delete();
                        
                        //返回的id和文件名拼接
                        if(fileNameStr.length() > 0){
                            fileNameStr.append(",").append(fileName);
                        }else{
                            fileNameStr.append(fileName);
                        }
                        if(idStr.length() > 0){
                            idStr.append(",").append(id);
                        }else{
                            idStr.append(id);
                        }
                        
                    }
                }
            }
          //写出
            JSONObject jo = new JSONObject();
            jo.put("id", idStr.toString());
            jo.put("name", fileNameStr.toString());
            response.getWriter().write(jo.toString());
            return;
        }
  • 相关阅读:
    tensorflow 2.0 学习 (十) 拟合与过拟合问题
    tensorflow 2.0 学习 (九) tensorboard可视化功能认识
    tensorflow 2.0 学习 (八) keras模块的认识
    tensorflow 2.0 学习 (七) 反向传播代码逐步实现
    tensorflow 2.0 学习 (六) Himmelblua函数求极值
    tensorflow 2.0 学习 (五)MPG全连接网络训练与测试
    arp协议简单介绍
    Pthread spinlock自旋锁
    线程和进程状态
    内核态(内核空间)和用户态(用户空间)的区别和联系·
  • 原文地址:https://www.cnblogs.com/clovem/p/7815755.html
Copyright © 2011-2022 走看看