Java 将网络链接的图片或视频读取下载到本地,并上传到自己的文件服务器! 您所在的位置:网站首页 hutool下载文件保存到本地 Java 将网络链接的图片或视频读取下载到本地,并上传到自己的文件服务器!

Java 将网络链接的图片或视频读取下载到本地,并上传到自己的文件服务器!

2024-01-13 14:16| 来源: 网络整理| 查看: 265

前言

需求:将一个 https 网络链接的图片或视频,用 Java 程序读取下载到本地,并上传到自己的文件服务器! 例如一个文件链接:

https://ipfs.io/ipfs/bafybeiawxuupxfab4mrbgsf6vsjagat6i2nqk7pov5tdcnzllwv243raoi

首先,根据链接无法确定这是一个图片还是视频;

其次,并不知道这个文件的扩展名,可能是 .jpg、.png、.mp4、.avi 等等。

几番百度下来,都是需要首先知道该链接的类型和后缀,作为方法参数,就这一个链接,不可能知道,于是决定自己制定解决方案。

解决方案

1、确定文件类型:image 或者 video。通过发送请求,获取到响应头 Content Type。这里用到 Hutool 工具包,安装依赖:

Maven:在项目的 pom.xml 的 dependencies 中加入以下内容:

cn.hutool hutool-all 5.8.12

Gradle:

implementation 'cn.hutool:hutool-all:5.8.12'

2、发送请求:结果为 image/png, 可确定文件类型为 image,扩展名为 .png

String url = "https://ipfs.io/ipfs/bafybeiawxuupxfab4mrbgsf6vsjagat6i2nqk7pov5tdcnzllwv243raoi"; String contentType = HttpUtil.createGet(url).execute().header(Header.CONTENT_TYPE);

提供几种常见的文件格式:

.jpg

image/jpg

.jpeg

image/jpeg

.png

image/png

.gif

image/gif

.svg

image/svg+xml

.mp4

video/mp4

.mov

video/quicktime

.wmv

video/x-ms-wmv

.avi

video/avi

3、下载文件

// 下载文件进度 1 / 100 final double[] downloadFileProgress = { 0.1D }; // 新文件名:时间戳-UUID String newName = String.format("%s-%s", System.currentTimeMillis(), CommonUtil.randomUUID()); // 文件扩展名:从表格进行匹配 String extension = ".png"; // 下载文件:回调下载进度,放在 /temp 目录下 File file = HttpUtil.downloadFileFromUrl(url.getUrl(), new File("/temp/" + newName + extension), new StreamProgress() { // 开始下载 @Override public void start() { log.info("Start download file..."); } // 每隔 10% 记录一次日志 @Override public void progress(long total, long progressSize) { double downloadFileProgressTemp = (double) progressSize / total; if (downloadFileProgressTemp >= downloadFileProgress[0]) { downloadFileProgress[0] += 0.1D; log.info("Download file progress: {}% [{} / {}]", downloadFileProgressTemp * 100, progressSize, total); } } // 下载成功 @Override public void finish() { log.info("Download file success!"); } });

4、上传到自己的文件服务器:调用自己项目的文件上传工具类上传文件。

String myServerUrl = FileUtil.upload(file);

5、完成:上传完成后删除临时文件,如果不上传服务器,则不用删除,留在本机。

boolean deleted = file.delete();过程

看了很多使用 URL 的方法,结果都是各种报错信息,完全不能使用。

URL url = new URL(url); url.openConnection()结论

核心方法:

// 执行请求获取响应 HttpResponse cn.hutool.http.HttpRequest.execute(); // 根据 url 下载文件 File cn.hutool.http.HttpUtil.downloadFileFromUrl(String url, File destFile, StreamProgress streamProgress);

今天推荐的 Hutool (🍬A set of tools that keep Java sweet.)是实打实的工具类,包含各种常用的工具,感兴趣的朋友可以 Look Look:https://hutool.cn



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有