Android--通过Http下载网络图片

主要用途:适用于从同一网址下载多张图片

例如:自己搭建了一个服务端,图片放在同个目录下,

如放在image/目录下,则下载路径为:

.../image/a.jpg,.../image/b.jpg等等

因此下载路径的格式为:网址前缀+图片名称(.../image/ + xxx.jpg)

拼接一个字符串,格式为网址前缀+@+图片名称+@+图片名称,可以拼接多个图片名称

如:.../image/@[email protected]@c.jpg

将拼接好的字符串传进到download(String content)函数中,程序会先切割字符串,再通过

循环拼接图片下载路径,下载前会先检查本地是否有此图片,如没有则发送Http请求下载图片

:此种方式只做简单用途,因为如果网址前缀中包含@,则很大可能达不到预期结果)


package com.joye3g.http;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class UpLoadImage {

	/**
	 * 传进地址下载图片 
	 * @param content  content格式为 “http://xxxxxx/@xxx.jpg”
	 * 如http://h.hiphotos.baidu.com/album/w%3D230/sign=f9c2cdc2b8014a90813e41be99763971/@63d0f703918fa0ecef2f167d279759ee3c6ddbd2.jpg
	 * @throws Exception
	 */
	public void download(String content) throws Exception{
		//以@来切割字条串
		String[] str = content.split("@");
		//取得网址前缀
		String urlPathPrefix = str[0];
		//本地路径
		String localPath = "sdcard";
		for(int i = 1; i < str.length; i++){
			//i从1开始,str[0]是网址前缀,str[1]开始为图片名称
			//拼接起来的路径格式为:sdcard/xxx.jpg
			String filePath = localPath + File.separator + str[i];
			//拼接起来的图片下载路径格式为:http://xxx.com/xxx.jpg
			String urlPath = urlPathPrefix + str[i];
			//判断sdcard下有没有此图片存在,如果不存在,则发送Http请求下载图片,存在则不下载
			if(isFileExist(filePath)){
				return;
			}else{
				//从URL中取得输入流
				InputStream is = getHttpInputStream(urlPath);
				//创建新文件
				File file = createFile(filePath);
				//下载图片
				downLoadImage(file, is);  
			}
		}
	}

	/**
	 * 下载图片
	 * @param file  文件
	 * @param is	从URL取得的输入流
	 */
	private void downLoadImage(File file, InputStream is){
		FileOutputStream fs = null;
		try {
			fs = new FileOutputStream(file);
			byte[] buffer = new byte[4 * 1024];
			int len = 0;
			while((len = is.read(buffer)) != -1){
				fs.write(buffer, 0, len);
			}
			fs.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				if(fs != null){
					fs.close();
				}
				if(is != null){
					is.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 根据URL取得输入流
	 * @param urlPath   网络路径
	 * @return
	 * @throws IOException
	 */
	private InputStream getHttpInputStream(String urlPath) throws IOException{
		URL url = new URL(urlPath);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		return conn.getInputStream();
	}

	/**
	 * 判断文件是否已经存在
	 * @param fileName     文件路径
	 * @return
	 */
	private boolean isFileExist(String fileName){
		File file = new File(fileName);
		return file.exists();
	}

	/**
	 * 在指定路径下创建新文件
	 * @param fileName
	 * @return
	 * @throws IOException
	 */
	private File createFile(String fileName) throws IOException{
		File file = new File(fileName);
		file.createNewFile();
		return file;
	}
}


你可能感兴趣的:(android,http,下载图片,SD卡,创建文件)