java 通过远程URL实现文件下载几种方式

这篇具有很好参考价值的文章主要介绍了java 通过远程URL实现文件下载几种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概要

java环境下通过远程接口实现文件下载几种方式:

  1. 使用NIO下载文件, 需要 jdk 1.7+
  2. 利用 commonio 库下载文件,依赖Apache Common IO
  3. 文件通道FileChahhel
  4. 通过URL直接下载转换成MultipartFile

需要具备参数

  1. 文件内容
  2. 保存地址
  3. 文件名称类型(后缀)

实现的四种方式:

使用NIO下载文件


    /**
     * 使用NIO下载文件, 需要 jdk 1.7+
     * @param url 下载地址
     * @param saveDir 保存地址
     * @param fileName 文件名称
     */
    public static void downloadByNIO(String url, String saveDir, String fileName) {
        try (InputStream ins = new UrlResource(url).getInputStream()) {
            Path target = Paths.get(saveDir, fileName);
            Files.createDirectories(target.getParent());
            Files.copy(ins, target, StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException e) {
            log.error("文件下载失败:" + e.getMessage());
            throw new RuntimeException("downloadByNIO error from remoteUrl", e);
        }
    }

利用Apache common io 库下载文件

    /**
     * 利用 commonio 库下载文件,依赖Apache Common IO
     * @param url 下载地址
     * @param saveDir 保存地址
     * @param fileName 文件名称
     */
    public static void downloadByApacheCommonIO(String url, String saveDir, String fileName) {
        try {
            FileUtils.copyURLToFile(new URL(url), new File(saveDir, fileName));
        } catch (IOException e) {
            log.error("文件下载失败:" + e.getMessage());
            throw new RuntimeException("downloadByApacheCommonIO error from remoteUrl", e);
        }
    }

使用文件通道FileChahhel下载文件

/**
     * 文件下载
     * 使用文件通道FileChahhel下载文件
     * @param downloadUrl 下载地址
     */
    public static void downloadFileByChannel(String downloadUrl, String tempPath) {
        ReadableByteChannel readableByteChannel;
        FileUtil.createTempFile(new File(tempPath));
        try (FileChannel fileChannel = new FileOutputStream(FileUtil.createTempFile(new File(tempPath))).getChannel()){
            URL url = new URL(downloadUrl);
            readableByteChannel = Channels.newChannel(new BufferedInputStream(url.openStream()));
            fileChannel.transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
        } catch (Exception e) {
            log.error("文件下载失败:" + e.getMessage());
            throw new RuntimeException("downloadFileByChannel error from downloadUrl", e);
        }
    }

通过URL直接转换成MutipartFile文章来源地址https://www.toymoban.com/news/detail-769665.html

public static MultipartFile getFileFromUrl(String url, String fileName) throws IOException {
        // Create a resource from the URL
        URL urlObj = new URL(url);
        HttpURLConnection connection = (HttpURLConnection) urlObj.openConnection();
        connection.setRequestMethod("GET");
        connection.setConnectTimeout(10000);
        connection.setReadTimeout(60000);
        connection.setDoOutput(true);
        DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
        DiskFileItem fileItem = (DiskFileItem) fileItemFactory.createItem("file",
                MediaType.ALL_VALUE, true, fileName);
        fileItem.getOutputStream().flush();
        try (ReadableByteChannel readableByteChannel = Channels.newChannel(connection.getInputStream());
             OutputStream outputStream = fileItem.getOutputStream();
             WritableByteChannel writableByteChannel = Channels.newChannel(outputStream)) {
            // Create a byte buffer to store the file content
            ByteBuffer buffer = ByteBuffer.allocateDirect(1024 << 2);

            // Read the file content into the byte buffer
            while (readableByteChannel.read(buffer) != -1) {
                // Prepare the byte buffer to be read again
                buffer.flip();
                while (buffer.hasRemaining()) {
                    writableByteChannel.write(buffer);
                }
                buffer.clear();
            }
        } catch (Exception e) {
            // Handle network or file IO exceptions here
            log.error("Error uploading file", e);
            throw e;
        }
        return new CommonsMultipartFile(fileItem);
    }

小结

这里没有小洁

到了这里,关于java 通过远程URL实现文件下载几种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java如何实现下载文件的几种方式

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/Boy_Martin/article/details/126058565

    2024年02月13日
    浏览(70)
  • js 通过window.open(url)下载文件,修改文件名

    在页面调用

    2024年02月15日
    浏览(83)
  • Python学习笔记:Requests库安装、通过url下载文件

    在pipy或者github下载,通常是个zip,解压缩后在路径输入cmd,并运行以下代码  安装完成后,输入python再输入import requests得到可以判断时候完成安装  2.通过url下载文件 使用的是urllib模块

    2024年02月10日
    浏览(48)
  • 使用Java实现远程文件下载到本地目录

    今天开发时遇见了一个下载附件的需求,他的附件是存在一个网盘里查询时只是给我返回了一个https的路径,需要通过这个路径把附件下载到本地的目录里 这里我使用的是网上搜索的图片路径做了一下测试仅供参考 如正文介绍 使用Java实现远程文件下载到本地目录记录就到此

    2024年02月12日
    浏览(51)
  • java通过httpclient携带请求头参数获取第三方文件流接口并实现实现文件下载

    创建httpclient 请求,并在header携带指定key,也可根据实际需要携带token等信息。获取第三方接口返回的文件输入流并写到本地response中,实现返回文件流,前端通过js的a标签进行下载。 代码如下: 前端js代码

    2024年02月16日
    浏览(51)
  • 远程xml读取解析,将image url下载到本地,延时队列定时删除文件,图片访问路径保存在数据库中

    远程xml部分内容 mq发布端定时任务发送消息 mq消费端 1,远程xml读取 2,xml解析,将image中图片url保存在集合中 3,遍历集合,当本地不存在此图片时,下载图片至本地 4,将图片路径传给延时队列,用于稍后删除图片 5,保存自定义图片访问路径等信息到数据库 XMLUtil读取远程

    2024年02月15日
    浏览(49)
  • Java通过文件流和文件地址下载文件

    如何使用 MultipartFile 进行文件上传、下载到本地,并返回保存路径呢: 用于在 Spring Boot 应用中获取文件流,然后处理上传的文件,将文件保存到指定目录并返回保存的文件路径。下面对代码的各个部分进行简要介绍: 上传目录设置 :在这个示例中, UPLOAD_DIR 常量用于定义上

    2024年02月12日
    浏览(48)
  • 记录--盘点前端实现文件下载的几种方式

    前端涉及到的文件下载还是很多应用场景的,那么前端文件下载有多少种方式呢?每种方式有什么优缺点呢?下面就来一一介绍。 通过 a 标签的 download 属性来实现文件下载,这种方式是最简单的,也是我们比较常用的方式,先来看示例代码: 就上面的这个示例,我们点击下

    2024年02月13日
    浏览(54)
  • JAVA通过HTTP协议下载网络文件

            分享一个通过原生的Java代码下载网络资源文件方法,使用URL类连接上网络服务器通过多线程使用I/O流的方式下载文件。 流程: 获取到资源的大小及各项参数 使用RandomAccessFile类生成对应大小的文件用于防止空间不足 启动下载任务线程,传入线程号等参数 下载线程与

    2024年02月11日
    浏览(50)
  • java http远程调用接口下载文件

    远程调用http接口下载文件,接口返回流 一、将文件保存本地 二、将接收到流直接返回

    2024年02月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包