您的位置:首页 > 理论基础 > 计算机网络

HttpURLConnection根据URL下载图片

2015-07-14 08:08 831 查看
来看下最简单的根据URL下载图片,此方法在实际开发中,不建议使用,因为有些图片是下载不了的,比如百度上的一些图片,返回http的响应码是405

[java] view
plaincopy





package cn.ztz.test;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.InetAddress;

import java.net.URL;

public class HttpDownLoad {

public static void download(String url, String dir,String fileName) {

HttpURLConnection httpURLConnection = null;

OutputStream out = null;

InputStream in = null;

try {

URL sendUrl = new URL(url);

httpURLConnection = (HttpURLConnection) sendUrl.openConnection();

httpURLConnection.setRequestMethod("POST");

httpURLConnection.setRequestProperty("contentType", "utf-8");

httpURLConnection.setDoOutput(true);

httpURLConnection.setUseCaches(false);

httpURLConnection.setConnectTimeout(3000);

httpURLConnection.setReadTimeout(3000);

httpURLConnection.setRequestProperty(

"User-agent",InetAddress.getLocalHost().getHostAddress() + ":"

+ System.getProperty("catalina.home"));

out = httpURLConnection.getOutputStream();

// 清空缓冲区数据

out.flush();

// 获取HTTP状态码

int httpStatusCode = httpURLConnection.getResponseCode();

if(httpStatusCode!=200){

throw new RuntimeException("异常");

}

in = httpURLConnection.getInputStream();

// 获取文件长度

int len = httpURLConnection.getContentLength();

// 路径+文件名

String pathAndName = dir + File.separator + fileName;

// 保存文件

saveFileByByte(in, pathAndName, len);

} catch (Exception e) {

e.printStackTrace();

} finally {

if (out != null) {

try {

out.close();

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e.getMessage());

}

}

if (in != null) {

try {

in.close();

} catch (Exception e) {

e.printStackTrace();

}

}

if (httpURLConnection != null) {

httpURLConnection.disconnect();

httpURLConnection = null;

}

}

}

//写文件

private static void saveFileByByte(InputStream in, String path, int len)

throws Exception {

byte[] byteDatas = new byte[len];

BufferedOutputStream bw = null;

try {

// 创建文件对象

File f = new File(path);

// 创建文件路径

if (!f.getParentFile().exists())

f.getParentFile().mkdirs();

// 写入文件

bw = new BufferedOutputStream(new FileOutputStream(path));

int bytesRead = 0;

while ((bytesRead = in.read(byteDatas, 0, byteDatas.length)) != -1) {

bw.write(byteDatas, 0, bytesRead);

}

} catch (Exception e) {

e.printStackTrace();

throw e;

} finally {

try {

if (bw != null)

bw.close();

} catch (Exception e) {

throw e;

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: