今天遇到一个问题:
基于微信开发的下载图片,我开始用缓冲流,去接收,然后写入文件,但结果字节变大了,文件无法查看,之后我换了字节流却成功了!搞不懂~
代码如下:
public static String httpRequest(String url, String downPath) throws Exception {
System.out.println(downPath);
// 建立连接
HttpClient client = new HttpClient();
GetMethod get = new GetMethod(url);
client.executeMethod(get);
for (Header item : get.getResponseHeaders()) {
System.err.println(item);
}
// 获取响应头的文件名字段
String status = get.getResponseHeader("Content-Type").getValue().toString();
if (status.contains("application/json")) {
throw new Exception(get.getResponseBodyAsString());
}
String fileName = get.getResponseHeader("Content-disposition").getValue().toString();
// 正则匹配文件名
Matcher mc = Pattern.compile("filename=\"([^\"]+)\"").matcher(fileName);
if (mc.find()) {
fileName = mc.group(1);
}
InputStream in = get.getResponseBodyAsStream();
OutputStream out = new FileOutputStream(new File(downPath + fileName));
int line = -1;
while ((line = in.read()) != -1) {
out.write(line);
}
out.close();
in.close();
// 这里用缓存流文件会变大,从而图片写入错误,原因未知
// BufferedReader br = new BufferedReader(new
// InputStreamReader(get.getResponseBodyAsStream()));
// BufferedWriter bw = new BufferedWriter(new FileWriter(new File(downPath +
// fileName)));
// String line = null;
// while ((line = br.readLine()) != null) {
// bw.write(line + "\r\n");
// bw.flush();
// }
// br.close();
// bw.close();
return downPath + fileName;
}