使⽤HttpClient实现⽂件的下载
最近系统中需要和第三⽅的系统做⼀个集成。由于是需要调⽤远程的服务,
⼀开始⾃⼰的想的主要有两种⽅案,第⼀是通过WebService的⽅式,由对、⽅⽣成对应的WebService服务,然后客户端再根据WSDL对应的客户端代码。第⼆种⽅案是通过HttpClient访问。经过再三考虑,最终选择了HttpClient的⽅案。HttpClient的⽅案主要有以下好处.
1.服务可以是⽆状态的,客户端和服务端通过JSON传递数据,⾮常的⽅便扩展。
2.⽅便扩展,服务端发布新功能,客户端不需要重新⽣成代码,只要再需要的时候通过Http请求即可。 好了,现在主要来讲⼀下⾃⼰的实现逻辑。⾸先引⼊HttpClient的jar包。我使⽤的是较⽼的版本,HttpClient
3.0.2 。主要实现步骤如下,⾸先要创建Httpclient对象。然后再创建访问⽅式,访问的主要释放是Get和Post。分别对应的对象是GetMethod和PostMethod。执⾏executeMethod后,就可以获得对应的响应了,然后再根据Response解析出对应的数据。实现的代码如下:
“`
st;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import org.apachemons.httpclient.Header;
import org.apachemons.httpclient.HeaderElement;
import org.apachemons.httpclient.HttpClient;
import org.apachemons.httpclient.HttpException;
import org.apachemons.httpclient.NameValuePair;
import org.hods.GetMethod;
public class DownloadFileDemo {
//⽂件下载路径
private final static String REMOTE_FILE_URL = “afa “;
private final static int BUFFER = 1024;
public static void main(String[] args) {
HttpClient client = new HttpClient();
GetMethod httpGet = new GetMethod(REMOTE_FILE_URL);
InputStream in = null;
FileOutputStream out = null;
try {
//执⾏get⽅法
//获取response的返回头信息
Header contentHead = httpGet
.getResponseHeader("Content-Disposition");
//开始解析⽂件头信息,这⾥使⽤的是HeaderElement对象作为⽂件头的基础信息
HeaderElement[] elements = Elements();
String filerName = null;
for (HeaderElement el : elements) {
//遍历,获取filename。filename信息对应的就是下载⽂件的⽂件名称。
NameValuePair pair = el.getParameterByName("filename");
System.out.Name() + ":" + Value());
filerName = Value();
}
//由于这个地址是下载地址,返回的是字节流信息。所有这⾥直接将返回的body转换成字节流
in = ResponseBodyAsStream();
out = new FileOutputStream(new File("E:\\web\\" + filerName));
下载apachebyte[] b = new byte[BUFFER];
int len = 0;
byte[] content = new byte[0];
byte[] content = new byte[0];
int length = 0;
//写⽂件,这⾥将所有的内容都缓存到内存中,最后⼀次性写⼊
while ((len = in.read(b)) > 0) {
// out.write(b,0,len);
length = content.length;
content = pyOf(content, length + len);// 扩容
System.arraycopy(b, 0, content, length, len);// 将第⼆个数组与第⼀个数组合并        }
out.write(content, 0, content.length);
in.close();
out.close();
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
if (in != null) {
try {
in.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
if (out != null)
try {
out.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
} finally {
}
System.out.println("download, success!!");
}
}“`

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。