`

HttpURLConnection下载文件

 
阅读更多
public class HttpDownloadUtility
{

    private static final Logger logger = LoggerFactory.getLogger(HttpDownloadUtility.class);

    private static final int BUFFER_SIZE = 4096;
    private static final int END_OF_FILE = -1;

    public static boolean downloadFile(String fileURL, File saveDir)
    {
        return downloadFile(fileURL, saveDir, null);
    }

    public static boolean downloadFile(String fileURL, File saveDir, String fileName)
    {
        HttpURLConnection httpConn = null;
        try
        {
            URL url = new URL(fileURL);
            httpConn = (HttpURLConnection) url.openConnection();
            int responseCode = httpConn.getResponseCode();

            // always check HTTP response code first
            if (responseCode == HttpURLConnection.HTTP_OK)
            {

                String disposition = httpConn.getHeaderField("Content-Disposition");
                String contentType = httpConn.getContentType();
                int contentLength = httpConn.getContentLength();

                if (StringUtils.isEmpty(fileName))
                    fileName = parseFileName(fileURL, disposition);

                logger.info("Content-Type = " + contentType);
                logger.info("Content-Disposition = " + disposition);
                logger.info("Content-Length = " + contentLength);
                logger.info("fileName = " + fileName);

                if (!saveDir.exists())
                {
                    logger.info("Creating File Destination Folder  " + saveDir.getAbsolutePath());
                    saveDir.mkdirs();
                }

                File savedFile = saveFile(saveDir, httpConn, fileName);
                logger.info("File downloaded to " + savedFile.getAbsolutePath());
                return true;
            }
            else
            {
                logger.warn("No file to download. Server replied HTTP code: " + responseCode);
                return false;
            }
        }
        catch (Exception e)
        {
            logger.error("downloading failed from URL " + fileURL, e);
            return false;
        }
        finally
        {
            if (null != httpConn)
                httpConn.disconnect();
        }
    }

    private static String parseFileName(String fileURL, String disposition)
    {
        String fileName = "";
        if (disposition != null)
        {
            // extracts file name from header field
            int index = disposition.indexOf("filename=");
            if (index > 0)
            {
                fileName = disposition.substring(index + 10, disposition.length() - 1);
            }
        }
        else
        {
            // extracts file name from URL
            fileName = fileURL.substring(fileURL.lastIndexOf("/") + 1, fileURL.length());
        }
        return fileName;
    }

    private static File saveFile(File saveDir, HttpURLConnection httpConn, String fileName)
        throws IOException, FileNotFoundException
    {
        // opens input stream from the HTTP connection
        InputStream inputStream = httpConn.getInputStream();

        File saveFile = new File(saveDir, fileName);

        // opens an output stream to save into file
        FileOutputStream outputStream = new FileOutputStream(saveFile);

        int bytesRead = END_OF_FILE;
        byte[] buffer = new byte[BUFFER_SIZE];
        while ((bytesRead = inputStream.read(buffer)) != END_OF_FILE)
        {
            outputStream.write(buffer, 0, bytesRead);
        }

        outputStream.close();
        inputStream.close();
        return saveFile;
    }
}
分享到:
评论

相关推荐

    HttpUrlConnection下载文件

    ### HttpUrlConnection下载文件:Java实现详解 在Java编程中,`HttpUrlConnection`是用于发送HTTP请求和接收响应的标准工具之一。它提供了一个简单而强大的API来与Web服务器进行交互,包括GET、POST等HTTP方法。...

    Android利用Http下载文件

    在Android平台上,利用Http协议进行文件下载是一项常见的任务,它涉及到网络编程、多线程、文件操作等多个技术领域。本文将深入探讨如何在Android中实现这个功能,主要围绕标题“Android利用Http下载文件”和提供的...

    HttpURLConnection文件下载\httpURLConnection文件下载

    在给定的代码片段中,展示了如何使用`HttpURLConnection`进行文件下载。 首先,我们看到代码引入了`java.io`、`java.net`和`java.util`这三个包。`java.io`包含了输入/输出流,用于处理数据的读写;`java.net`包含...

    JAVA通过HttpURLConnection 上传和下载文件的方法

    JAVA通过HttpURLConnection上传和下载文件的方法 JAVA通过HttpURLConnection上传和下载文件的方法是非常有实用价值的,需要的朋友可以参考下。HttpURLConnection是一个Java类,用于从网络中读取数据或向网络中写入...

    使用HttpUrlConnection实现上传文件 服务器端代码

    在Java编程环境中,当需要与Web服务器交互,例如上传文件时,`HttpURLConnection`是一个常见的选择,因为它提供了灵活且高效的方式。本篇文章将详细讲解如何使用`HttpURLConnection`实现文件上传,同时涉及到服务器...

    本示例使用HttpUrlConnection实现上传文件

    在Android开发中,有时我们需要将本地的文件...通过理解以上步骤和注意事项,开发者可以有效地利用HttpURLConnection在Android应用中实现代理文件上传功能。同时,了解服务器端如何接收和处理这些文件也是至关重要的。

    Android移动开发-使用HttpURLConnection实现多线程的下载

    实例Demo程序来示范使用HttpURLConnection实现多线程下载。 使用多线程下载文件可以更快完成文件的下载,因为客户端启动多条线程进行下载就意味着服务器也需要为该客户端提供响应的服务。假设服务器同时最多服务100...

    Java自带的HttpURLConnection访问接口实现文件上传

    在本文中,我们将深入探讨如何使用HttpURLConnection实现文件上传,同时也会涉及普通参数的传递。 首先,我们需要理解HTTP请求的基本结构。HTTP请求通常由以下几个部分组成:请求行、请求头、空行和请求体。在文件...

    使用HttpURLConnection下载图片

    在本例中,我们将探讨如何使用`HttpURLConnection`来下载图片,这是一个基础但实用的网络编程任务。下面我们将详细介绍这个过程,并涉及到的相关知识点。 1. **HttpURLConnection简介**: `HttpURLConnection`是`...

    Android基于HttpUrlConnection类的文件下载实例代码

    Android基于HttpUrlConnection类的文件下载实例代码 Android操作系统中,文件下载是一种常见的功能,为了实现文件下载,Android提供了多种方式,包括使用HttpUrlConnection类和OkHttp库等。HttpUrlConnection类是...

    java 用HttpsURLConnection进行传递中文时错误总结

    参考文件`HttpsGetData.java`可能是实现这一功能的一个示例代码。它可能包含了创建`HttpsURLConnection`对象、设置请求头、发送数据、接收响应和处理结果的完整流程。通过阅读和分析这个代码,你可以更深入地理解...

    HttpURLConnection servlet 多文件参数 断点上传

    本知识点将深入探讨如何使用`HttpURLConnection`与Servlet协同工作,处理多文件参数以及实现断点上传功能。 首先,`HttpURLConnection`是Java API中的一个核心类,它负责提供HTTP协议的连接功能。相比Apache ...

    HttpURLConnection读取本地目录上传远程服务器

    1. **建立连接**:创建`URL`对象,表示本地文件或目录所在的URL,然后通过`openConnection()`方法获取`HttpURLConnection`实例。 2. **设置请求方法**:由于默认的请求方法是GET,我们需要调用`setRequestMethod(...

    HttpUrlConnection下载图片

    在这个场景中,我们将讨论如何利用HttpUrlConnection来下载图片并将其显示在ImageView上,以及如何下载百度网页源码并展示在WebView中。 1. **HttpUrlConnection基本使用** - 创建URL对象:首先,你需要创建一个...

    Netroid框架和HttpURLConnection类的文件下载demo

    本文将深入探讨“Netroid框架”和“HttpURLConnection类”的使用,并通过一个文件下载的示例来阐述如何利用它们进行文件传输,同时关注性能指标如下载速度。 **Netroid框架** Netroid是一个轻量级的Android网络...

    Android实现文件的上传下载

    Android提供了多种方式来实现文件下载,包括使用HttpURLConnection、AsyncTask、Intent服务等。其中,HttpURLConnection是最基础的方式,适用于简单的文件下载。它允许开发者通过HTTP协议直接与服务器通信,获取文件...

    HttpURLConnection实现三方接口调用,带有FILE文件参数

    HttpURLConnection实现三方接口HTTP调用调用,带有FILE文件参数

    Android-使用HttpURLConnection实现断点续传

    在Android开发中,网络编程是不可或缺的一部分,尤其是在处理大文件下载时,断点续传功能显得尤为重要。HttpURLConnection是Java标准库提供的一种网络连接接口,适用于Android系统,它提供了更高效、更灵活的网络...

    HttpURLConnection实现单线程下载,多线程下载,多线程续点下载

    2. 每个线程创建自己的HttpURLConnection,设置请求范围(Range)以下载指定部分的文件。 3. 同样,每个线程读取其负责的部分并写入本地文件的相应位置。 ```java // 线程类 class DownloadThread extends Thread {...

Global site tag (gtag.js) - Google Analytics