JAVA 获取网络图片或本地图片压缩后打成ZIP,但是获取网络流存在问题:每次获取图片流的大小不一样(图片不完整),以致无法构建图片进行压缩?
/*
释以下代码:即可获取完整图片流网络不稳定情况且网络流是顺序读取,所以获得前部份流,不需要关闭连接,只需要将用完的流关闭即可
*/
finally{
if(httpCon != null)
httpCon.disconnect();
}
package com.sunshine.monitor.comm.util.http;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import sun.net.www.protocol.ftp.FtpURLConnection;
/**
* 获取网络图片
*
* @author OY
*/
public abstract class HttpHelpers {
private static final String KEY = "file.encoding";
private static final String ENCODING = "GBK";
public static InputStream getInputStream(String url) throws Exception{
URLConnection con = null;
HttpURLConnection httpCon = null;
FtpURLConnection ftpCon= null;
try {
System.setProperty(KEY, ENCODING);
URL _url = new URL(url);
con = _url.openConnection();
con.setConnectTimeout(3000);
con.setUseCaches(false);// 不缓存
con.setDefaultUseCaches(false);
if (con instanceof HttpURLConnection) {
httpCon = (HttpURLConnection) con;
httpCon.setInstanceFollowRedirects(true);
//httpCon.setRequestProperty("Accept-Charset", "utf-8");
if (httpCon.getResponseCode() >= 300) {
System.out.println("URL:" + url
+ ",HTTP Request is not success, Response code is "
+ httpCon.getResponseCode());
} else {
return httpCon.getInputStream();
}
} else if(con instanceof FtpURLConnection){
ftpCon = (FtpURLConnection)con;
return ftpCon.getInputStream();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(httpCon != null)
httpCon.disconnect();
}
return null;
}
public static void main(String[] args) {
// 1图片本地存储大小
OutputStream fout = null;
InputStream input = null;
try {
fout = new FileOutputStream("F:" + File.separator + "1.jpg");
input = getInputStream("http://192.168.1.200/t.jpg");
byte[] buffer = new byte[1024];
int count = 0 ;
while((count=input.read(buffer)) != -1){
fout.write(buffer, 0, count);
}
fout.flush();
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
if(input != null) input.close();
if(fout != null) fout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 2是否可以构建图片
try {
input = getInputStream("http://192.168.1.200/t.jpg");
ImageInputStream iis = ImageIO.createImageInputStream(input);
if(iis != null) {
Iterator<ImageReader> it = ImageIO.getImageReaders(iis);
if(!it.hasNext()){
System.out.println("流不完整或不是图片!");
} else {
System.out.println(it.next().getFormatName());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}