最近在做云相册,还在做模块封装,现在先将http下载图片贴出来:
package com.yuyan.http;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import com.yuyan.cache.MyDiskCache;
import com.yuyan.global.IDownloadListener;
import com.yuyan.utils.MyUtils;
/**
* @ClassName: HttpDownload
* @Description: http下载照片工具类
* @author yan.yu
* @date 2013-6-17 下午6:04:05
*
*/
public enum MyHttpDownload
{
INSTANCE;
/*下载监听器*/
private static IDownloadListener listener = null;
public static final int IO_BUFFER_SIZE = 8 * 1024;
public static MyHttpDownload newInstance(IDownloadListener downLoadListener)
{
listener = downLoadListener;
return INSTANCE;
}
public static MyHttpDownload newInstance()
{
return INSTANCE;
}
/**
* @Description: http从服务器上下载图片
* @param @param urlString
* @param @return
* @param @throws IOException
* @return File
* @throws
*/
public File downloadBitmap(String urlString) throws IOException
{
/*获取本地缓存对象*/
final MyDiskCache cache = MyDiskCache.openCache();
final File cacheFile = new File(cache.createFilePath(urlString));
if (cache.containsKey(urlString))
{
/*如果本地缓存中存在该图片就直接返回本地图片*/
return cacheFile;
}
MyUtils.disableConnectionReuseIfNecessary();
HttpURLConnection urlConnection = null;
BufferedOutputStream out = null;
try
{
final URL url = new URL(urlString);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setReadTimeout(10 * 1000);
urlConnection.setConnectTimeout(5 * 1000);
/*直接上传,禁止写入缓存*/
urlConnection.setUseCaches(false);
final InputStream in = new BufferedInputStream(urlConnection.getInputStream(), IO_BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(cacheFile),IO_BUFFER_SIZE);
int b;
if(listener != null)
listener.onStart();
while ((b = in.read()) != -1)
{
out.write(b);
if(listener != null)
listener.onProgress(b);
}
cacheFile.setLastModified(System.currentTimeMillis());
if(listener != null)
listener.onFinish(cacheFile);
}
catch (IOException e)
{
if(listener != null)
listener.onError();
throw e;
}
finally
{
if (urlConnection != null)
{
urlConnection.disconnect();
}
if (out != null)
{
out.flush();
out.close();
}
}
return cacheFile;
}
}