java代码实现使用网络地址下载文件

简介: java代码实现使用网络地址下载文件
加哥今天给大家分享一个使用java代码实现用网络url实现文件的下载方法,在平时的学习或者开发中有人总会需要给你一个地址让你调用java代码实现文件的下载。话不多说,直接给大家上代码。
下面的代码是一个Controller层的方法,在方法上我们定义了请求路径,请求时候需要传递的参数。不论是图片、压缩文件包、word文档、pdf文档、excel表格文件等都可以实现下载,只要网路地址传输没问题。
package com.sunwayland.quartz;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
@Slf4j
@Controller("test")
public class Download {
    @RequestMapping("checkDownload")
    public void checkDownload(@ApiParam("文件地址") @RequestParam("url") String url,
                              HttpServletResponse response) throws Exception {
        HttpURLConnection conn = null;
        InputStream fis = null;
        try {
            File file = new File(url);
            // 取得文件的后缀名。
            String ext = file.getName().substring(file.getName().lastIndexOf(".") + 1).toLowerCase();
            StringBuffer buffername = new StringBuffer(url.substring(url.lastIndexOf("/")+1));
            // 取的文件名
            String filename = buffername.toString();
            URL path = new URL(url);
            conn = (HttpURLConnection) path.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5 * 1000);
            // 通过输入流获取数据
            fis = conn.getInputStream();
            byte[] buffer = readInputStream(fis);
            if (null != buffer && buffer.length > 0) {
                // 清空response
                response.reset();
                // 设置response的Header
                response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
                response.addHeader("Content-Length", "" + buffer.length);
                OutputStream toClient = response.getOutputStream();
                //response.setContentType("application/x-msdownload");
                response.setContentType("application/octet-stream");
                toClient.write(buffer);
                toClient.flush();
                toClient.close();
            }
        } catch (IOException ex) {
            log.error("下载文件异常:", ex);
            throw new Exception("下载异常,请稍后再试。");
        } finally {
            if (conn != null) {
                conn.disconnect();
            }
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException ioe) {
                    log.error("下载文件->关闭流异常:", ioe);
                }
            }
        }
    }
    /**
     * 从输入流中获取数据
     *
     * @param fis : InputStream
     * @return byte[]
     * @author chenp
     * @date 2023/3/28 11:31
     */
    private byte[] readInputStream(InputStream fis) throws IOException {
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = fis.read(buffer)) != -1) {
            outStream.write(buffer, 0, len);
        }
        fis.close();
        return outStream.toByteArray();
    }
}
注意:大家在测试的过程中需要注意传输的网络地址正确;注意文件名称的响应编码格式,如果大家在swagger里面测试出现来的类似于%ADBB的名称时注意可以尝试在浏览器直接测试,它把中文文件名做了一个转义会让你错觉认为自己的乱码了。
相关文章
|
5月前
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
165 0
|
5月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
467 0
|
5月前
|
机器学习/深度学习 算法 物联网
【SCI】利用信念传播在超密集无线网络中进行分布式信道分配(Matlab代码实现)
【SCI】利用信念传播在超密集无线网络中进行分布式信道分配(Matlab代码实现)
174 0
|
4月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
235 1
|
5月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
385 2
|
4月前
|
机器学习/深度学习 数据采集 存储
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
595 0
|
4月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
229 0
|
5月前
|
机器学习/深度学习 并行计算 算法
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
141 8
|
5月前
|
算法 数据挖掘 区块链
基于遗传算法的多式联运车辆路径网络优优化研究(Matlab代码实现)
基于遗传算法的多式联运车辆路径网络优优化研究(Matlab代码实现)
160 2
|
5月前
|
机器学习/深度学习 缓存 算法
2025年华为杯A题|通用神经网络处理器下的核内调度问题研究生数学建模|思路、代码、论文|持续更新中....
2025年华为杯A题|通用神经网络处理器下的核内调度问题研究生数学建模|思路、代码、论文|持续更新中....
544 1