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();
} }
Servlet 实现上传文件以及同时,写入xml格式文件和上传的更多相关文章
- python3 库pandas写入csv格式文件出现中文乱码问题解决方法
python3 库pandas写入csv格式文件出现中文乱码问题解决方法 解决方案: 问题是使用pandas的DataFrame的to_csv方法实现csv文件输出,但是遇到中文乱码问题,已验证的正确 ...
- java socket报文通信(三)java对象和xml格式文件的相互转换
前两节讲了socket服务端,客户端的建立以及报文的封装.今天就来讲一下java对象和xml格式文件的相互转换. 上一节中我们列举了一个报文格式,其实我们可以理解为其实就是一个字符串.但是我们不可能每 ...
- 使用visual studio把xsd文件转成xml格式文件
使用visual studio把xsd文件转成xml格式文件 最近一段时间都在做Amazon的mws api的对接工作,mws api的描述文件都是使用的xsd文件来进行的,之前确实也没有接触过,也花 ...
- 怎么统计指定文件夹下含有.xml格式的文件数目
如何统计指定文件夹下含有.xml格式的文件数目?如题 ------解决思路----------------------Directory.GetFiles(@"路径", " ...
- Python数据写入csv格式文件
(只是传递,基础知识也是根基) Python读取数据,并存入Excel打开的CSV格式文件内! 这里需要用到bs4,csv,codecs,os模块. 废话不多说,直接写代码!该重要的内容都已经注释了, ...
- Opencv YAML和XML格式文件操作详解
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/47660943 本文参考Opencv 2 ...
- Windows删除文件夹下的指定格式文件(递归删除)
问题描述: 今天遇到一个需求,需要对文件夹进行文件筛选.目录结构较为复杂(目录较多,层次较深),数据量较大(总共60GB左右). 鉴于上述情况,直接排除了人工处理方式(否则小伙伴们会打死我的). 解决 ...
- WP8解析XML格式文件
DOTA2 WebAPI请求返回的格式有两种,一种是XML,一种是JSON,默认是返回JSON格式,如果要返回XML格式的话,需要在加上format=xml. 这里举一个简单的解析XML格式的例子(更 ...
- 音频文件解析(一):WAV格式文件头部解析
WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源. 文 ...
随机推荐
- 优秀API设计的十大原则
优秀API设计的十大原则 2015-09-23 分类:编程开发.设计模式.首页精华暂无人评论 分享到:更多4 二十万年薪PHP工程师培养计划 成为被疯抢的Android牛人 风中叶讲Java重难 ...
- 【翻译】How To Tango With Django 1.5.4 第五章
5数据模型和数据库 一个模型就是一个描述你数据表的python对象.不用再通过SQL来操作数据库,而是使用python对象来操作数据库. 5.1rango要求 ...一个目录下面有多个下面 ...一个 ...
- Summary of Mac Versions
1.在 submit 的过程被 cancel 掉,可能会出现某些文件被 lock 住导致没办法再重新 update and commit. 解决方法: a) Memu."Action&quo ...
- bringSubviewToFront和insertSubview: atIndex:
bring方法只能在当前SuperView中改变位置,insertSubview则可以脱离自己的superVIew,成为另个同级甚至高级的view的子view
- SQLSERVER20008 完整备份和差异备份
--差异备份 DIFFERENTIAL ) ),)+'.bak' BACKUP DATABASE [testbackup] TO DISK=@name WITH DIFFERENTIAL, NOFOR ...
- Extjs 图片的自动缩放
function resizeImage(obj) { var width = Ext.getCmp('welcome').getWidth(); //welcome 为一Panel的id 分割线下的 ...
- Java 一维数组 二维数组 三维数组
二维数组包含一位数组 三维数组就是在二维数组的基础上,再加一层.把二维数组看做是一维数组就可以了,按照上述理解类推. 下面是 一维 二维 三维数组例子 一维数组: int[] array1 ...
- 【Android测试】【第十二节】Uiautomator——API详解
◆版权声明:本文出自carter_dream的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4921701.html 简单的例子 以一个 ...
- SQL Server索引进阶第五篇:索引包含列 .
包含列解析所谓的包含列就是包含在非聚集索引中,并且不是索引列中的列.或者说的更通俗一点就是:把一些底层数据表的数据列包含在非聚集索引的索引页中,而这些数据列又不是索引列,那么这些列就是包含列.同时,这 ...
- iOS,Xcod7/8,iOS使用修改点
1.Xcod7使用修改点 2.Xcode8使用修改点 Xcod7使用修改点 1.xcode7 新建的项目,Foundation下默认所有http请求都被改为https请求. HTTP+SSL/TLS+ ...