`
hb_keepmoving
  • 浏览: 230490 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

利用HttpURLConnection远程下载文件

 
阅读更多

1.原理,浏览器访问-->localserver(下载文件)--文件又保存在另外一台服务器上。

即:在localserver上利用HttpURLConnection 先把文件读到localserver的流中,再从localserver输出到浏览器供下载。

localserver 的访问code:

String remoteUrl = reportRemoteIPUrl+"/projectname/xxxxServlet?sFileName="+sFileName;
URL url = new URL(remoteUrl);
URLConnection urlConnection = url.openConnection(); 
HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection; 
httpURLConnection.setDoOutput(true); //true -- will setting parameters
httpURLConnection.setDoInput(true);//true--will allow read in from httpURLConnection
httpURLConnection.setUseCaches(false);//will not use caches
httpURLConnection.setRequestProperty("Content-type", "application/x-java-serialized-object");//setting serialized java object.
httpURLConnection.setRequestMethod("POST");//default is GET
httpURLConnection.setRequestProperty("connection", "Keep-Alive");
httpURLConnection.setRequestProperty("Charsert", "UTF-8");
httpURLConnection.setConnectTimeout(60000);//1 m
httpURLConnection.setReadTimeout(60000);//1 m

httpURLConnection.connect();//connect to server (tcp)

OutputStream out = httpURLConnection.getOutputStream();
ObjectOutputStream oout = new ObjectOutputStream(out);
oout.writeObject(new String(sFileName));//write object
oout.flush();
oout.close();
InputStream in = httpURLConnection.getInputStream();//send request to server
long len = in.available();
response.reset();
if((contentType != null) && (len>0)){
	response.setContentType(contentType);
}
int totalNum = 0;
response.setHeader("Content-disposition", "attachment; filename=" + filename);
//加上下面这句代码后,发现从localserver发送到浏览器的文件不完整。
//原因inputstream流中第一次接收不完整。
//response.setContentLength((int) len);
response.setDateHeader("Expires", System.currentTimeMillis());
OutputStream sout = response.getOutputStream();//输出页面,以供下载
byte[] buffer = new byte[512];
int bufferSize;
while ((bufferSize=in.read(buffer)) != -1 ) {
	sout.write(buffer,0,bufferSize);
	totalNum = totalNum + bufferSize;
}
sout.flush();
sout.close();
in.close();

 

2.remote server 接收请求后,再读取文件后,传给localserver。

InputStream inputStream = request.getInputStream();//用于接收post请求的输入流,可以从流中获取提交的数据
ObjectInputStream oinps = new ObjectInputStream(inputStream);
Object path = oinps.readObject();//读取request数据,往往可以使post提交的参数

FileInputStream fis = new FileInputStream(path);
InputStream fin = new BufferedInputStream(fis);
//clear response
response.reset();

response.setContentType(contentType);
response.setHeader("Content-disposition", "attachment; filename=" + sFileName);
response.setContentLength((int) len);
response.setDateHeader("Expires", System.currentTimeMillis());
response.setContentType("application/octet-stream");

OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[fis.available()];
int byteNum;
int totalNum = 0;
while ((byteNum = fin.read(buffer)) != -1) {
	toClient.write(buffer,0,byteNum);
	totalNum = totalNum + byteNum;
}
toClient.flush();
toClient.close();
fin.close();

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    远程连接服务器HttpURLConnection

    这些文件可能包含了如何利用`HttpURLConnection`进行更复杂交互的示例,比如处理JSON响应、使用HTTPS安全连接、实现断点续传等。 总结来说,`HttpURLConnection`是Java中进行HTTP通信的基础工具,它提供了连接、...

    Java利用HttpURLConnection发送post请求上传文件.docx

    `HttpURLConnection`是Java标准库提供的一种网络连接接口,它允许我们通过HTTP协议与远程服务器通信。 首先,我们需要了解HTTP协议中文件上传的基本原理。当我们在网页上通过表单提交文件时,表单的数据会被封装成...

    调用URL下载并显示PDF文件

    在Android开发中,有时我们需要实现从远程URL下载PDF文件并将其在用户设备上显示的功能。这个过程涉及到网络请求、文件处理以及用户界面的构建。在这个场景下,我们可以使用`Android Studio`作为集成开发环境,结合`...

    Android利用Http下载文件

    在Android平台上,利用Http协议进行文件下载是一项常见的任务。这项技术可以帮助我们从远程服务器获取数据,比如应用程序更新、用户文档或者其他资源。以下是一篇关于如何在Android中实现Http文件下载的详细讲解。 ...

    JAVA读取远程文件

    通过上述分析,我们可以看到,利用Java实现缓冲多线程无阻塞读取远程文件,不仅可以显著提升数据传输效率,还能有效应对网络波动,提供更佳的用户体验。未来,随着网络技术和硬件设备的不断进步,进一步优化算法、...

    用JAVA实现缓冲多线程无阻塞读取远程文件.pdf

    尽管给出的内容片段并不完整,但基于这些信息,我们可以理解到开发者在设计这样一个远程文件读取程序时所采取的策略和方法,即利用Java的IO流、多线程、网络通信以及异常处理等技术点来实现高效、稳定、无阻塞的远程...

    java 实现上传文件到远程服务器

    本篇文章将详细介绍如何利用Java编程语言结合Spring MVC框架来实现文件的远程上传功能。具体实现过程中,我们会采用HTTP协议中的`POST`方法,并通过`multipart/form-data`编码格式来传输数据。 #### 关键概念和技术...

    Android 如何远程下载安装的应用源码.zip

    首先,Android应用的远程下载通常基于HTTP或HTTPS协议,利用Android的`HttpURLConnection`或第三方库如`OkHttp`进行网络请求。在Java代码中,你可以创建一个`URL`对象来指定下载地址,然后通过`HttpURLConnection`或...

    一个简单的远程下载程序

    3. **网络请求**:利用如`requests`库(Python)或`HttpURLConnection`(Java)等API,向服务器发送GET请求来获取文件。请求中可能包含头部信息,如用户代理、接受编码等,以符合服务器的交互规则。 4. **文件流...

    Java远程读取XML文件相关

    ### Java远程读取XML文件及SOAP协议应用 ...总结来说,Java中处理XML文件和利用SOAP进行远程数据交互是一个复杂而重要的主题。通过掌握这些基本概念和技术,开发人员能够有效地在分布式系统之间进行数据交换。

    Java实现批量下载并压缩文件.pptx.pptx

    - **HttpURLConnection**:这是Java标准库中的API,可以直接建立HTTP连接,设置请求头和参数,然后读取响应数据,将远程文件下载到本地。 - **Apache HttpClient**:这是一个功能更强大的第三方库,提供了更多的...

    用Java多线程实现无阻塞读取远程文件

    对于Java开发者来说,利用多线程技术来实现远程文件的无阻塞读取可以显著提高应用程序的性能与响应速度。本文将详细介绍如何使用Java多线程技术实现这一目标。 #### Java多线程概述 Java多线程是Java平台提供的一...

    Android文件断点下载

    对于断点下载,我们需要设置`Range`请求头,值形如`bytes=startOffset-endOffset`,其中`startOffset`是本地已下载的文件大小,`endOffset`为远程文件的总大小。 4. **创建输出流**:建立到本地文件的输出流,用于...

    java 访问网络 下载文件 爬虫 超时处理解决方案

    在IT领域,尤其是在Java编程中,访问网络、下载文件、实现爬虫功能以及处理超时问题是非常关键的技术点。本文将深入探讨如何在Java中有效处理这些方面的问题,特别是超时处理解决方案,这对于构建高效、稳定的网络...

    java批量下载文件

    通过本文的介绍,读者可以了解到如何利用Java实现批量文件下载以及如何将下载后的文件压缩成ZIP格式,这对于处理大量文件的场景非常有用。在实际开发过程中,还需要根据具体情况进行优化和调整,以满足不同的业务...

    网络连接及单线程多线程下载示例

    List<DownloadTask> tasks = splitFileIntoParts远程文件大小, 分块大小); ExecutorService executor = Executors.newFixedThreadPool(5); // 创建线程池 for (DownloadTask task : tasks) { executor.submit(task...

    android客户端从服务器端获取json数据并解析的实现代码

    1、利用HttpUrlConnection 代码如下:/** * 从指定的URL中获取数组 * @param urlPath * @return * @throws Exception */ public static String readParse(String urlPath) throws Exception { ...

    Java 实例 - 获取远程文件大小源代码+详细指导教程.zip

    在Java编程中,获取远程文件大小是一项常见的任务,特别是在网络编程和文件下载应用中。这个实例教程将指导你如何利用Java实现这一功能。通过提供的源代码,你可以学习到如何使用HTTP协议来与服务器进行交互,并获取...

    Java实现HTTP文件下载

    根据给定的文件信息,以下是对“Java实现HTTP文件下载”的详细知识点解析: ### Java实现HTTP文件下载 #### 核心概念与流程 在互联网环境中,我们经常需要从远程服务器下载资源,这些资源通常通过URL(Uniform ...

    用JAVA实现缓冲多线程无阻塞读取远程文件.doc

    总结来说,这个Java实现的多线程无阻塞读取远程文件系统利用了环形缓冲区来提升效率,通过多线程并行下载数据,并通过同步机制确保数据的正确读写。`HttpReader`类作为基础工具,负责HTTP连接和数据读取,同时具备...

Global site tag (gtag.js) - Google Analytics