图片上传到ftp服务器,报错java.io.IOException: Stream closed,求大神帮忙!!!

aini1314jiao 2018-11-29 10:06:46
package com.hisense.task;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;

import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.hisense.been.FerryInFileData;
import com.hisense.been.VmsInfo;
import com.hisense.common.C3P0DataSourceManage;
import com.hisense.common.ConfigConstants;
import com.hisense.common.ImageUtil;
import com.hisense.common.MQSendProducer;
import com.hisense.common.ThreadPool;
import com.hisense.common.Xml2JsonUtil;

@SuppressWarnings(value = { "rawtypes", "unused" })
public class WebChatForecastTask {

private static final Logger log = LoggerFactory
.getLogger(WebChatForecastTask.class);

// private IBaseDao PoliceCaseFactsDaoImpl;
private MQSendProducer mqSendProducer;
private C3P0DataSourceManage connectionPool;
private ThreadPool threadPool;

public WebChatForecastTask() {
connectionPool = C3P0DataSourceManage.getInstance();
threadPool = ThreadPool.getInstanceByParams(
ConfigConstants.COREPOOLSIZE, -1, 0L,
ConfigConstants.TIMEUNIT_MILLISECONDS, 0,
ConfigConstants.HANDLER_CALLERRUNSPOLICY);
mqSendProducer =new MQSendProducer();

}

public void execute() {

log.info("开始执行execute 方法");

// 解压zip 上传图片
getPoliceCaseData();


// 解析xml文件

// 发送到mq
/*
* if(result!=null && result.length()>0) {
* mqSendProducer.sendProducerMsg(ConfigConstants.MQ_FORECAST_TOPICNAME,
* "02_"+result);
* //mqSendProducer.sendProducerMsg(ConfigConstants.MQ_FORECAST_TOPICNAME
* , result); System.out.println("发送的MQ信息预报"+"02_"+result); }
*/
}



/***
* 获取数据库中的数据,将查询到的ResultSet集合遍历到 list 中
* 判断list集合中的数据是xml还是zip
*/
public void getPoliceCaseData(){
log.info("开始查询数据...........");
Connection conn = null;
PreparedStatement pstm=null;
ResultSet rs = null;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

try {
//查询数据库获取数据,
conn = connectionPool.getConnection();
String sql = "select * from ferry_in_file_data";
pstm=conn.prepareStatement(sql);
rs=pstm.executeQuery();
//FerryInFileData ferryInFileData = new FerryInFileData();
List<?> resultList = convertList(rs);

for(int i=0;i<resultList.size();i++){
Map map = (Map) resultList.get(i);
//System.out.println(map);
for (Object obj : map.keySet()) {
//获取类型
Object object = map.get("FILE_BYTE");
Object object2 = map.get("FILE_NAME");
System.out.println(object2);
String fileName= (String) object2;

System.out.println("fileName 数据是===="+fileName);
//转换类型
//Blob blob = (Blob) ferryInFileData.getFileByte();
InputStream in = ((Blob) object).getBinaryStream();
//System.out.println("ferryInFileData.getFileName() 数据是====="+ferryInFileData.getFileName());
//解压zip文件
processFastZip(fileName,in);

}

}
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
try {
pstm.close();
rs.close();
conn.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}
}


// ResultSet 对象进行遍历到 list 中
@SuppressWarnings("all")
private static List convertList(ResultSet rs) throws SQLException{
List list = new ArrayList();
ResultSetMetaData md = rs.getMetaData();//获取键名
int columnCount = md.getColumnCount();//获取行的数量
while (rs.next()) {
Map rowData = new HashMap();//声明Map
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i));//获取键名及值
}

list.add(rowData);
}

return list;
}



/***
* 解压zip文件
*
*
*
*/

public void processFastZip(String fileName, InputStream input)throws Exception {
// 摆渡数据
String jsonData = "";
Map<String, String> map = new HashMap<String, String>();

//为上传图片构建初始化
VmsInfo vmsInfo = new VmsInfo();
List<String> imgList = new ArrayList<String>();

// 获取压缩文件
ZipInputStream zin = new ZipInputStream(input);

ZipEntry entry = null;
while ((entry = zin.getNextEntry()) != null) {
if(!entry.isDirectory()){
String entryName = entry.getName();

//判断该文件是否是xml文件,如果是xml,解析xml
if(entryName.endsWith(".xml")){
//System.out.println("xml文件有===="+entryName);
//解析xml
String xml2json = Xml2JsonUtil.xml2JSON(entryName);

}else if(entryName.endsWith(".png")){//判断是否是图片
System.out.println("png文件有===="+entryName);
//将图片添加到list集合中
//imgList.add(entryName);
//获取到图片,然后上传到ftp服务器
//String imagePath = ImageUtil.initAndUploadIMG(vmsInfo, imgList, vmsInfo.getVmsid() + "_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".png");
String path = ImageUtil.uploadToFTP(zin, entryName);

System.out.println("path 路径是======================="+path);

}else if(entryName.endsWith(".csv")){//判断是否是csv文件
//System.out.println("csv文件有==="+entryName);

/*ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = 0;
while ((i = zin.read()) != -1){
baos.write(i);
}
String info = baos.toString("UTF-8");
IOUtils.closeQuietly(baos);
if (info.length() != 0) {
if (info.indexOf("{") > -1) {
jsonData = info.substring(info.indexOf("{"));
}
}*/
}else{ //其他文件
System.out.println("其他文件有===="+entryName);

}
}
}

//zin.close();
//input.close();


}

public static void main(String[] args) {
new WebChatForecastTask().execute();
}




}
...全文
504 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
aini1314jiao 2018-11-29
  • 打赏
  • 举报
回复
在线等 挺急的 大神求助。。。。。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧