import java.io.Closeable; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.Assert; import com.odianyun.cc.client.exception.OccClientRequestException; import com.odianyun.cc.model.dto.OccConfigDownloadDTO; public class OccRequestUtils { private final static Logger logger = LoggerFactory.getLogger(OccRequestUtils.class); private static int BUFFER_SIZE = 4096;//缓冲区大小 /** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数,参数为JSON格式。 * @param dir * 下载文件存储目录 * @return 所代表远程资源的响应结果 */ public static OccConfigDownloadDTO sendPost(String url, String param,String dir) { InputStreamReader isr = null; FileWriter fw = null; char[] buf = new char[BUFFER_SIZE]; int size = 0; String groupPath = null; String fileName = null; String fileVersion = null; File proFile = null; try { //发送请求 HttpURLConnection connection = sendParam(url,param); //读取Properties文件流 isr = new InputStreamReader(connection.getInputStream(),"UTF-8"); //从头中拿到文件相关属性 groupPath = connection.getHeaderField("groupPath"); Assert.notNull(groupPath,"Failed to obtain parameters from OCC-Server,groupPath is required; maybe record not found."); fileName = connection.getHeaderField("fileName"); Assert.notNull(fileName,"Failed to obtain parameters from OCC-Server,fileName is required; maybe record not found."); fileVersion = connection.getHeaderField("fileVersion"); Assert.notNull(fileName,"Failed to obtain parameters from OCC-Server,fileVersion is required; maybe record not found."); proFile = new File(System.getProperty("global.config.path") + File.separator + dir + File.separator + groupPath , fileName); if (proFile.exists()){ proFile.delete(); }else{ proFile.getParentFile().mkdirs(); } fw = new FileWriter(proFile); while ((size = isr.read(buf)) != -1){ fw.write(buf,0,size); } fw.flush(); } catch (Exception e) { throw new OccClientRequestException(e.getMessage(),e); } //使用finally块来关闭输出流、输入流 finally{ close(isr,fw); } return new OccConfigDownloadDTO(proFile,groupPath, fileName, fileVersion); } private static HttpURLConnection sendParam(String url,String param) throws IOException { URL realUrl = new URL(url); // 打开和URL之间的连接 HttpURLConnection connection = (HttpURLConnection)realUrl.openConnection(); // 设置通用的请求属性 connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestMethod("POST"); connection.setUseCaches(false); connection.setInstanceFollowRedirects(true); connection.setRequestProperty("Content-Type","application/json;charset=utf-8"); connection.connect(); PrintWriter out = null; try { // 获取URLConnection对象对应的输出流 out = new PrintWriter(connection.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); }finally { if (out != null){ out.close(); } } return connection; } private static void close(Closeable... closeAbles){ if (closeAbles == null || closeAbles.length <= 0) { return; } for (Closeable closeAble : closeAbles) { if (closeAble != null) { try { closeAble.close(); } catch (IOException e) { logger.error(e.getMessage(), e); } } } } }
相关推荐
在Android开发中,HTTPConnection是Java的标准库提供的一种网络通信方式,可以用于实现文件的上传。这个过程涉及到了网络编程、文件操作以及多线程等关键知识点。下面将详细讲解如何在Android应用中使用...
NULL 博文链接:https://wangxc.iteye.com/blog/591160
在J2ME(Java Micro Edition)平台上实现断点续传,可以为移动设备上的文件下载提供可靠的解决方案。本文将深入探讨J2ME中实现断点续传的关键技术点,并给出相关实现思路。 首先,理解断点续传的基本原理。断点续传...
`HttpConnection.cpp`和`HttpConnection.h`很可能是这个类的实现和声明文件。在`HttpConnection.h`中,可能会定义类的接口,包括构造函数、设置请求方法、设置URL、设置请求头、设置数据等方法,以及执行请求和获取...
对于大文件下载,客户端可以利用HTTP的Range头来实现断点续传,允许在下载过程中暂停并从上次中断的位置继续。在上传大文件时,客户端可以分块发送数据,以避免一次性加载整个文件到内存。 总之,通过Qt创建的HTTP...
本篇文章将详细讲解如何使用HTTPConnection类来实现安卓文件上传功能。由于服务器端的搭建过程相对简单,此处我们主要关注客户端——安卓应用的实现细节。 首先,理解文件上传的基本原理至关重要。在HTTP协议中,...
- **发送请求**:通过`HttpConnection`打开连接并设置请求方法为POST,然后通过`openOutputStream()`方法写入请求体和文件数据到服务器。 - **处理响应**:检查服务器返回的状态码是否为`HTTP_OK`(即200),如果...
在J2ME中,对于POST上传,我们首先要设置HttpConnection的Content-Type为"multipart/form-data",这是因为这种编码方式能够携带多个文件和普通表单数据。 multipart/form-data的结构由一系列的part组成,每个part...
在客户端(如另一台电脑或设备),你可以使用任何支持HTTP协议的工具(如浏览器或curl)来访问`http://<device_ip>:8080/<file_path>`下载文件。 为了实现文件上传,你需要在服务器端添加POST请求的处理逻辑,解析...
断点续传的基本思想是:当文件下载到一定程度时发生中断,则在下次下载时可以从已下载的部分之后继续下载剩余部分,而不是从头开始下载。这一过程涉及到了服务器与客户端之间的通信协议,尤其是HTTP协议的支持。 ##...
Java实现基于HTTP协议的网络文件下载 Java是基于HTTP协议的网络文件下载的实现详解,下面是对该主题的详细介绍。 首先,让我们了解一下HTTP协议的工作方式。HTTP协议工作方式基于客户/服务器模式的信息交换过程,...
2. **HTTP通信**:J2ME支持通过`javax.microedition.io.HttpConnection`进行HTTP请求。为了上传文件,你需要创建一个POST请求,并设置适当的HTTP头,如`Content-Type`和`Content-Length`。然后,通过`...
当客户端(如浏览器)向服务器发起文件下载请求时,默认情况下会发送一个完整的GET请求。例如: ``` GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-...
Java 实现HTTP断点续传是一项在网络编程中非常实用的技术,尤其在大文件下载时能够提高用户体验,因为用户可以中断下载并在稍后从上次中断的地方继续。以下将详细讲解断点续传的原理以及如何使用Java来实现。 断点...
`httpcore-4.2.2.jar`中的`HttpConnection`类负责建立和管理这种连接。 4. **处理响应**:服务器接收到请求后,会返回一个HTTP响应,包括状态码(如200表示成功,4xx或5xx表示错误)和可能的响应体。HttpClient库会...
#### 一、断点续传原理 断点续传技术是指在网络连接中断或下载过程中出现错误时,能够保存已下载的部分数据,并在恢复...通过本文介绍的方法和技术,可以有效地解决大文件下载过程中可能出现的问题,提高用户体验。
在实际应用中,这种技术常用于文件下载场景,特别是对于大文件的下载而言尤为重要。本文将详细介绍如何利用Java语言来实现断点续传功能,并深入解析其工作原理。 #### 断点续传的基本原理 断点续传的核心在于利用...