Javaネットワークリソースのダウンロード
3778 ワード
Javaを通じてネットワークリソースをダウンロードする
1、urlを通じてネットワークリソースファイルストリームを取得する
2、ファイルストリームをバイト配列に書き込む
3、バイト配列をクライアントブラウザに出力する
4、このような方式のファイル名と拡張子はURLによって定義されます.
5、ピクチャ.xml.txtなどのブラウザで直接解析できるリソースのダウンロードに適用します.他のリソースは直接URLからダウンロードできます.
6、http clientダウンロード方式
1、urlを通じてネットワークリソースファイルストリームを取得する
2、ファイルストリームをバイト配列に書き込む
3、バイト配列をクライアントブラウザに出力する
4、このような方式のファイル名と拡張子はURLによって定義されます.
5、ピクチャ.xml.txtなどのブラウザで直接解析できるリソースのダウンロードに適用します.他のリソースは直接URLからダウンロードできます.
6、http clientダウンロード方式
/**
*
* @param request
* @param response
*/
@RequestMapping("img_download")
public void downloadHouseImg(HttpServletRequest request,HttpServletResponse resp){
String url = request.getParameter("img_url");
//
InputStream content = null;
//
String timstamp = String.valueOf(System.currentTimeMillis());
HttpClient httpclient = new DefaultHttpClient();
Long contentLength = 0L;
String[] fileName = url.substring(url.lastIndexOf("/") + 1).split("\\.");
try{
HttpGet httpget = new HttpGet(url);
HttpResponse response = httpclient.execute(httpget);
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
HttpEntity entity = response.getEntity();
content = entity.getContent();
contentLength = entity.getContentLength();
}
byte[] buffer = new byte[contentLength.intValue()];
content.read(buffer);
// response
resp.reset();
// response Header
resp.addHeader("Content-Disposition", "attachment;filename=" + fileName[0]+fileName[1]);
resp.addHeader("Content-Length", "" + buffer.length);
resp.setContentType("application/octet-stream");
OutputStream toClient = new BufferedOutputStream(resp.getOutputStream());
toClient.write(buffer);
toClient.flush();
toClient.close();
}catch(Exception e){
e.printStackTrace();
}finally{
httpclient.getConnectionManager().shutdown();
}
}
7、テストを受けたことがあります httpclientのダウンロード方式は、画像が平凡で不完全な問題が発生します. 以下のストリームのダウンロード方法を提供します.public void downloadHouseImg(HttpServletRequest request,HttpServletResponse resp){
String url = request.getParameter("img_url");
String[] fileName = url.substring(url.lastIndexOf("/") + 1).split("\\.");
//
InputStream content = null;
String timstamp = String.valueOf(System.currentTimeMillis());
HttpClient httpclient = new DefaultHttpClient();
Long contentLength = 0L;
try{
URL img = new URL(url);
InputStream imgis = img.openStream();
resp.reset();
if(fileName != null && fileName.length >= 2){
resp.addHeader("Content-Disposition", "attachment;filename=" + fileName[0] + "." + fileName[1]);
}else{
resp.addHeader("Content-Disposition", "attachment;filename=" + timstamp+".png");
}
resp.setContentType("application/octet-stream");
OutputStream ots = resp.getOutputStream();
int size = 0;
byte[] buffer = new byte[8192];
while((size = imgis.read(buffer)) != -1){
ots.write(buffer,0,size);
}
ots.flush();
ots.close();
imgis.close();
}catch(Exception e){
e.printStackTrace();
}finally{
httpclient.getConnectionManager().shutdown();
}
}