Servlet 实现上传文件以及同时,写入xml格式文件和上传

package com.isoftstone.eply.servlet;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.isoftstone.eply.util.ChangeFileToString;
import com.isoftstone.eply.util.CheckElectronicPolicy;
import com.isoftstone.eply.util.CreateCheckXml;
import com.isoftstone.eply.vo.EPlyResponseFileVo;
import com.isoftstone.eply.vo.EPlyResponseVo;
import com.isoftstone.fwk.util.SpringUtils;

public class ElectroicPolicyUploadFileServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        this.doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
        String savePath = this.getServletContext().getContextPath()+"/upload";
        File file = new File(savePath);
        //判断上传文件的保存目录是否存在
        if (!file.exists() && !file.isDirectory()) {
            System.out.println(savePath+"目录不存在,需要创建");
            //创建目录
            file.mkdir();
        }
        String message = "";//消息提示
        try{
            //使用Apache文件上传组件处理文件上传步骤:
            //1、创建一个DiskFileItemFactory工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            //2、创建一个文件上传解析器
            ServletFileUpload upload = new ServletFileUpload(factory);
            //解决上传文件名的中文乱码
            upload.setHeaderEncoding("UTF-8");
            //3、判断提交上来的数据是否是上传表单的数据
            if(!ServletFileUpload.isMultipartContent(request)){
                //按照传统方式获取数据
                return ;
            }
            //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
            List<FileItem> list = upload.parseRequest(request);
            for(FileItem item : list){
                //如果fileitem中封装的是普通输入项的数据
                if(item.isFormField()){
                    String name = item.getFieldName();
                    //解决普通输入项的数据的中文乱码问题
                    String value = item.getString("UTF-8");
                    //value = new String(value.getBytes("iso8859-1"),"UTF-8");
                    System.out.println("普通输入项的名称和数据"+name + "=" + value);
                    CPlyNo=value;
                }else{//如果fileitem中封装的是上传文件
                    //得到上传的文件名称,
                    String filename = item.getName();if(filename==null || filename.trim().equals("")){
                        continue;
                    }
                    //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:  c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
                    //处理获取到的上传文件的文件名的路径部分,只保留文件名部分
                    filename = filename.substring(filename.lastIndexOf("\\")+1);
                    //获取item中的上传文件filename的输入流
                    InputStream in = item.getInputStream();
                    //创建一个文件输出流
                    FileOutputStream out = new FileOutputStream(savePath + "/" + filename);
                    //创建一个缓冲区
                    byte buffer[] = new byte[1024];
                    //判断输入流中的数据是否已经读完的标识
                    int len = 0;
                    //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
                    while((len=in.read(buffer))>0){
                        //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
                        out.write(buffer, 0, len);
                    }
                    //关闭输入流
                    in.close();
                    //关闭输出流
                    out.close();
                    //删除处理文件上传时生成的临时文件
                    item.delete();

                    UUID uuid = UUID.randomUUID();
                    // 得到对象产生的ID
                    String resid = uuid.toString(); 

              
                    String xmldata=  "<?xml version=\"1.0\" encoding=\"GBK\"?><PACKET><HEAD><KEY>E03</KEY><BUSINESS_SOURCE>0</BUSINESS_SOURCE><NUM>1100101000108000320150000092</NUM><TYPE>A</TYPE></HEAD></PACKET>";//拼报文
                    File xmlFile= new File(savePath +"/"+resid+".xml");//保存xml格式文件
                    if (!xmlFile.getParentFile().exists()) xmlFile.getParentFile().mkdirs();
                      BufferedReader bufferedReader = new BufferedReader(new StringReader(xmldata));
                      BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(xmlFile));
                      char buf[] = new char[1024];         //字符缓冲区
                      int len2;
                      while ((len2 = bufferedReader.read(buf)) != -1) {
                        bufferedWriter.write(buf, 0, len2);
                    }
                    bufferedWriter.flush();
                    bufferedReader.close();
                    bufferedWriter.close(); 

                    DataSource source = new FileDataSource(xmlFile);
                    DataHandler dataHandler =new DataHandler(source);
                    EPlyResponseVo epresponse=new EPlyResponseVo();
                    List<EPlyResponseFileVo> listvo  = new ArrayList<EPlyResponseFileVo>();

                    File file=new File(savePath +"/"+filename);
                    DataSource source2 = new FileDataSource(file);
                    DataHandler dataHandler2 =new DataHandler(source2); 

                    xmlFile.delete();   //删除临时文件
                    filepdf.delete();   //删除临时文件

        }catch (Exception e) {
            if("".equals(message)){
                message = "上传文件失败,请重新上传!";
            }
            e.printStackTrace();
        }
        response.setContentType("text/html;charset=gb2312");
        PrintWriter out=response.getWriter();
        out.println("<script type=‘text/javascript‘>alert(‘"+message+"‘)</script>");
        out.print("<script language=javascript>window.close();");
        out.print("</script>");
        out.close();
    }

}
时间: 2024-12-24 16:13:56

Servlet 实现上传文件以及同时,写入xml格式文件和上传的相关文章

java socket报文通信(三)java对象和xml格式文件的相互转换

前两节讲了socket服务端,客户端的建立以及报文的封装.今天就来讲一下java对象和xml格式文件的相互转换. 上一节中我们列举了一个报文格式,其实我们可以理解为其实就是一个字符串.但是我们不可能每次都去写字符串啊,这样的话肯定要疯.既然是面向对象的编程,肯定会有好的办法来解决这个问题.我们使用JAXBContext这个工具. package cn.com.egj.entity.shortcutTransfer.test; import java.io.BufferedReader; impo

怎么将多张CAD图纸文件共同转换成PDF格式文件?

怎么将多张CAD图纸文件共同转换成PDF格式文件?在设计绘制好一张CAD图纸文件,想要将其进行打开查看或是打印的时候都是那么的不方便,所以这时候我们就需要将其转换成PDF格式的文件,那么如果是一张一张的将CAD图纸进行转换的话就会很麻烦而且还很费时间,今天小编就要来教大家的就是怎样同时将多张CAD图纸文件共同转换成PDF格式的全部操作步骤,希望大家能够进行采纳! 第一步:首先需要打开你们电脑上面的CAD转换器软件,如果你们电脑上没有这款软件的话,您们就可以去到官网上面进行下载安装了,小编是用的就

读取xml格式文件

$v = [xml]get-content d:\vmconfig.xml $v.Domain.Computer.Name vmconfig.xml内容: <?xml version="1.0" encoding="UTF-8"?><Domain><Computer><Name>stcmm-vm-s01</Name><IpAddress>192.168.0.2</IpAddress>

使用第三方DOM解析XML格式文件

在解析XML格式文件的时候,使用SAX解析需要实现好多代理方法,比较难记,也容易出错,现在介绍一种由Google推出的第三方DOM(Document Object Model)来解析XML文件. 首先将该第三方文件拖到工程中.谷歌下载地址:https://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/XMLSupport/ (注:由于该三方是很久之前的版本,还是基于MRC格式下的代码,所以需要改成ARC兼

Python数据写入csv格式文件

(只是传递,基础知识也是根基) Python读取数据,并存入Excel打开的CSV格式文件内! 这里需要用到bs4,csv,codecs,os模块. 废话不多说,直接写代码!该重要的内容都已经注释了,剩下不懂的可以自己查询一下,或者QQ群内问我.QQ群在以往的博客中! 1 #coding:utf-8 2 from bs4 import BeautifulSoup 3 import bs4 4 import os 5 import time 6 import csv 7 import codecs

dom4解析xml格式文件实例

最近,一哥们在他们公司搞大数据时遇到一份比较棘手的xml文件,需要进行巧妙合理的解析,然后将数据进行封装和保存,由于文件比较大,数据比较多,格式稍微复杂一点,所以我帮他解决,刚拿到文件也觉得无从下手,因为文件中的数据格式确实有点复杂.以下给4种常见的xml文件的解析方式的分析对比: DOM DOM4J JDOM SAX 解析XML文件的几种方式和区别答: Dom解析 在内存中创建一个DOM树,该结构通常需要加载整个文档然后才能做工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的,

Windows删除文件夹下的指定格式文件(递归删除)

问题描述: 今天遇到一个需求,需要对文件夹进行文件筛选.目录结构较为复杂(目录较多,层次较深),数据量较大(总共60GB左右). 鉴于上述情况,直接排除了人工处理方式(否则小伙伴们会打死我的). 解决方法: 网上看了一下,初步确定通过windows命令的方式处理 . 命令如下: del /s PATH\*.扩展名 例如: del /s D:\AAA\*.zip   表示删除D盘下AAA文件夹以及其子文件夹中所有的ZIP格式文件. 命令可以在cmd中直接执行或者卸载bat脚本中执行. 提示:在执行

音频文件解析(一):WAV格式文件头部解析

WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源. 1.RIFF块(RIFF-Chunk) 偏移地址 字节数 数据类型 内容 &H00 4 String 'RIFF'文件标志 &H04 4 UInteger 文件总长 &H08  4  String  'WAVE'文件标志 2.格式化块(Format-Chunk) 偏移地址 字节数 数据类

通过java代码生成XML格式文件

import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import javax.swing.JOptionPane; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; /** * 本类测试生成XML格式的文件 * @author guanshun * */