Java 将网络链接的图片或视频读取下载到本地,并上传到自己的文件服务器! | 您所在的位置:网站首页 › 推特上视频怎么下载到本地 › Java 将网络链接的图片或视频读取下载到本地,并上传到自己的文件服务器! |
前言 需求:将一个 https 网络链接的图片或视频,用 Java 程序读取下载到本地,并上传到自己的文件服务器! 例如一个文件链接: https://ipfs.io/ipfs/bafybeiawxuupxfab4mrbgsf6vsjagat6i2nqk7pov5tdcnzllwv243raoi 首先,根据链接无法确定这是一个图片还是视频; 其次,并不知道这个文件的扩展名,可能是 .jpg、.png、.mp4、.avi 等等。 几番百度下来,都是需要首先知道该链接的类型和后缀,作为方法参数,就这一个链接,不可能知道,于是决定自己制定解决方案。 解决方案1、确定文件类型:image 或者 video。通过发送请求,获取到响应头 Content Type。这里用到 Hutool 工具包,安装依赖: Maven:在项目的 pom.xml 的 dependencies 中加入以下内容: 代码语言:javascript复制 cn.hutool hutool-all 5.8.12Gradle: 代码语言:javascript复制implementation 'cn.hutool:hutool-all:5.8.12'2、发送请求:结果为 image/png, 可确定文件类型为 image,扩展名为 .png 代码语言:javascript复制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、下载文件 代码语言:javascript复制// 下载文件进度 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、上传到自己的文件服务器:调用自己项目的文件上传工具类上传文件。 代码语言:javascript复制String myServerUrl = FileUtil.upload(file);5、完成:上传完成后删除临时文件,如果不上传服务器,则不用删除,留在本机。 代码语言:javascript复制boolean deleted = file.delete();过程看了很多使用 URL 的方法,结果都是各种报错信息,完全不能使用。 代码语言:javascript复制URL url = new URL(url); url.openConnection()结论核心方法: 代码语言:javascript复制// 执行请求获取响应 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 实验室设备网 版权所有 |