`

HttpConnection下载文件

 
阅读更多
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上传文件

    在Android开发中,HTTPConnection是Java的标准库提供的一种网络通信方式,可以用于实现文件的上传。这个过程涉及到了网络编程、文件操作以及多线程等关键知识点。下面将详细讲解如何在Android应用中使用...

    J2ME实现从服务器端下载文件(J2me for HttpConnection)

    NULL 博文链接:https://wangxc.iteye.com/blog/591160

    J2ME实现的断点续传,解决下载文件问题

    在J2ME(Java Micro Edition)平台上实现断点续传,可以为移动设备上的文件下载提供可靠的解决方案。本文将深入探讨J2ME中实现断点续传的关键技术点,并给出相关实现思路。 首先,理解断点续传的基本原理。断点续传...

    HTTP上传和下载C++封装类支持GET、POST多种方式

    `HttpConnection.cpp`和`HttpConnection.h`很可能是这个类的实现和声明文件。在`HttpConnection.h`中,可能会定义类的接口,包括构造函数、设置请求方法、设置URL、设置请求头、设置数据等方法,以及执行请求和获取...

    Qt模拟http server传输大文件

    对于大文件下载,客户端可以利用HTTP的Range头来实现断点续传,允许在下载过程中暂停并从上次中断的位置继续。在上传大文件时,客户端可以分块发送数据,以避免一次性加载整个文件到内存。 总之,通过Qt创建的HTTP...

    安卓实现上传文件

    本篇文章将详细讲解如何使用HTTPConnection类来实现安卓文件上传功能。由于服务器端的搭建过程相对简单,此处我们主要关注客户端——安卓应用的实现细节。 首先,理解文件上传的基本原理至关重要。在HTTP协议中,...

    J2MEpost方式上传文件

    - **发送请求**:通过`HttpConnection`打开连接并设置请求方法为POST,然后通过`openOutputStream()`方法写入请求体和文件数据到服务器。 - **处理响应**:检查服务器返回的状态码是否为`HTTP_OK`(即200),如果...

    J2ME中多个文件上传

    在J2ME中,对于POST上传,我们首先要设置HttpConnection的Content-Type为"multipart/form-data",这是因为这种编码方式能够携带多个文件和普通表单数据。 multipart/form-data的结构由一系列的part组成,每个part...

    swift-使用CocoaHTTPServer框架实现wifi局域网传输文件到iPhone的功能

    在客户端(如另一台电脑或设备),你可以使用任何支持HTTP协议的工具(如浏览器或curl)来访问`http://&lt;device_ip&gt;:8080/&lt;file_path&gt;`下载文件。 为了实现文件上传,你需要在服务器端添加POST请求的处理逻辑,解析...

    用Java 实现HTTP断点续传技术文档【附实例代码】

    断点续传的基本思想是:当文件下载到一定程度时发生中断,则在下次下载时可以从已下载的部分之后继续下载剩余部分,而不是从头开始下载。这一过程涉及到了服务器与客户端之间的通信协议,尤其是HTTP协议的支持。 ##...

    Java实现基于http协议的网络文件下载

    Java实现基于HTTP协议的网络文件下载 Java是基于HTTP协议的网络文件下载的实现详解,下面是对该主题的详细介绍。 首先,让我们了解一下HTTP协议的工作方式。HTTP协议工作方式基于客户/服务器模式的信息交换过程,...

    J2ME文件上传到服务器

    2. **HTTP通信**:J2ME支持通过`javax.microedition.io.HttpConnection`进行HTTP请求。为了上传文件,你需要创建一个POST请求,并设置适当的HTTP头,如`Content-Type`和`Content-Length`。然后,通过`...

    Java实现文件的断点续传(HTTP)

    当客户端(如浏览器)向服务器发起文件下载请求时,默认情况下会发送一个完整的GET请求。例如: ``` GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-...

    JAVA实现HTTP断点续传[借鉴].pdf

    Java 实现HTTP断点续传是一项在网络编程中非常实用的技术,尤其在大文件下载时能够提高用户体验,因为用户可以中断下载并在稍后从上次中断的地方继续。以下将详细讲解断点续传的原理以及如何使用Java来实现。 断点...

    http协议上传文件

    `httpcore-4.2.2.jar`中的`HttpConnection`类负责建立和管理这种连接。 4. **处理响应**:服务器接收到请求后,会返回一个HTTP响应,包括状态码(如200表示成功,4xx或5xx表示错误)和可能的响应体。HttpClient库会...

    支持断点续传(http)

    #### 一、断点续传原理 断点续传技术是指在网络连接中断或下载过程中出现错误时,能够保存已下载的部分数据,并在恢复...通过本文介绍的方法和技术,可以有效地解决大文件下载过程中可能出现的问题,提高用户体验。

    用Java实现断点续传

    在实际应用中,这种技术常用于文件下载场景,特别是对于大文件的下载而言尤为重要。本文将详细介绍如何利用Java语言来实现断点续传功能,并深入解析其工作原理。 #### 断点续传的基本原理 断点续传的核心在于利用...

Global site tag (gtag.js) - Google Analytics