java通过http网络url下载文件

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

java通过http网络url下载文件

    @Test
    public void test3() throws ParseException {
        String fileUrl = "http://*****/123.pdf";
        String savePath = "C:\\Users\\HHH\\Desktop\\文件\\123.pdf";

        try {
            URL url = new URL(fileUrl);
            InputStream inputStream = url.openStream();

            Path outputPath = Path.of(savePath);
            Files.copy(inputStream, outputPath, StandardCopyOption.REPLACE_EXISTING);

            System.out.println("File downloaded successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

上面代码报错,修改URL url = new URL(fileUrl);,使用URL url = new URL(new URI(fileUrl).toASCIIString());

    @Test
    public void test3() throws ParseException {
        String fileUrl = "http://*****/123.pdf";
        String savePath = "C:\\Users\\HHH\\Desktop\\文件\\123.pdf";

        try {
            URL url = new URL(new URI(fileUrl).toASCIIString());
            InputStream inputStream = url.openStream();

            Path outputPath = Path.of(savePath);
            Files.copy(inputStream, outputPath, StandardCopyOption.REPLACE_EXISTING);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

原因:

URL url = new URL(fileUrl); 和 URL url = new URL(new URI(fileUrl).toASCIIString()); 之间有一些微小的区别。
URL url = new URL(fileUrl);:这种方式直接使用 URL 类的构造函数创建一个 URL 对象。它假设 fileUrl 是一个合法的 URL 字符串,并不对其进行任何修改或编码。如果 fileUrl 含有特殊字符或非法字符,可能会导致 MalformedURLException 异常。
URL url = new URL(new URI(fileUrl).toASCIIString());:这种方式先通过 URI 类创建一个 URI 对象,然后再将其转换为 ASCII 字符串,最后使用 URL 类的构造函数创建一个 URL 对象。这种方式会对 fileUrl 进行编码,将其中的非 ASCII 字符转换为 ASCII 编码形式。这可以确保 URL 字符串的合法性。例如,使用这种方式可以正确处理包含中文或特殊字符的 URL。
总而言之,URL url = new URL(fileUrl); 直接创建 URL 对象,不对 URL 字符串进行编码。而 URL url = new URL(new URI(fileUrl).toASCIIString()); 先通过 URI 对象将 URL 字符串编码为 ASCII 形式,然后再创建 URL 对象。使用这种方式可以确保 URL 的合法性,尤其是处理包含非 ASCII 字符的 URL。

上面是本地保存到本地,以下是前端弹出保存框,可以选择保存位置

    @RequestMapping("/download")
    public void download(String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception {
        try {
            URL url = new URL(new URI("https://*****/asd.pdf").toASCIIString());
            InputStream inputStream = url.openStream();

            fileName = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20"); // 处理文件名中的空格和特殊字符

            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

            Path tempFile = Files.createTempFile("temp", ".pdf"); // 创建临时文件
            Files.copy(inputStream, tempFile, StandardCopyOption.REPLACE_EXISTING);

            Files.copy(tempFile, response.getOutputStream()); // 将临时文件写入响应输出流

            response.flushBuffer();
            tempFile.toFile().delete(); // 删除临时文件
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /*        
		
		try {
            URL url = new URL("https://asdasd/asd.pdf");
            URLConnection conn = url.openConnection();
            String fileName = "123asd.pdf";

            response.setContentType(conn.getContentType());
            response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

            InputStream inputStream = conn.getInputStream();
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

            Path tempFile = Files.createTempFile("temp", "");
            Files.copy(bufferedInputStream, tempFile, StandardCopyOption.REPLACE_EXISTING);

            Files.copy(tempFile, response.getOutputStream());
            response.flushBuffer();

            tempFile.toFile().delete();
            bufferedInputStream.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }*/

前端通过网络url下载文件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>

		</style>
	</head>
	<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
	<script>
		function btn() {
			//要下载的文件的url地址
			var url="";
			//创建一个XMLHttpRequest对象
			const xhr = new XMLHttpRequest()
			//使用 xhr.open('GET', url) 打开一个GET请求,将URL作为请求的目标地址。 
			xhr.open('GET', url)
			//指定返回的响应类型为Blob对象
			xhr.responseType = 'blob'
			//发送请求
			xhr.send()
			//发送请求后的回调
			xhr.onload = function () {
				//响应结果赋值给blob
			  const blob = xhr.response
			  //创建a标签
			  const a = document.createElement('a')
			  //将下载文件的数据作为URL赋值给 <a> 标签的 href 属性
			  a.href = URL.createObjectURL(blob)
			  //下载文件名
			  a.download = 'test.pdf'
			  //点击创建的a标签
			  a.click()
			}
		}
	</script>
	<body>
		<button onclick="btn()">aaaaa</button>
	</body>
</html>

文章来源地址https://www.toymoban.com/news/detail-658473.html

function btn() {
   var url = ("https://***/0974f0f.pdf");   
   //创建一个XMLHttpRequest对象,使用 `xhr.open('GET', url, true)` 打开一个GET请求,将URL作为请求的目标地址。
   var xhr = new XMLHttpRequest();
   xhr.open('GET', url, true); // 也可以使用POST方式,根据接口
   //将 `xhr.responseType` 设置为"blob",指定返回的响应类型为Blob对象
   xhr.responseType = "blob";
   // 当请求完成时触发。在该回调函数中,首先检查请求的状态是否为200(即成功),如果是,则继续处理
   xhr.onload = function() {
      // 请求完成
      if (this.status === 200) {
         // 返回200,从响应中获取Blob对象,并创建一个FileReader对象
         var blob = this.response;
         var reader = new FileReader();
         //将Blob对象转换为base64格式的数据,以便将其放入 `<a>` 标签的 `href` 属性中
         reader.readAsDataURL(blob); 
         //在 `reader.onload` 回调函数中,创建一个 `<a>` 标签用于下载,设置下载属性和链接的URL
         reader.onload = function(e) {
            // 转换完成,创建一个a标签用于下载
            var a = document.createElement('a');
            a.download = '123.pdf';
            a.href = e.target.result;
            $("body").append(a); // 修复firefox中无法触发click
            a.click();
            $(a).remove();
         }
      }
   };
   // 发送ajax请求
   xhr.send()
}

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

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

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

相关文章

  • js 通过window.open(url)下载文件,修改文件名

    在页面调用

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

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

    2024年02月10日
    浏览(48)
  • java http请求url有空格,通过unicode方法处理

    在Java中,可以通过Unicode编码来处理URL中的空格等特殊字符,将其转换为%xx的形式。下面是一个处理示例: 以上代码中,我们使用了URLEncoder.encode()方法将URL中的特殊字符进行编码,并将所有的+替换为%20,表示空格的编码。使用时,只需要传入需要编码的URL即可,例如: 输出

    2024年02月12日
    浏览(42)
  • java通过url读取文件内容

     使用java获取远程服务器的文件,并读取内容(该文件可以通过Url直接获取) 使用的时候稍作修改,将inputLine赋值,然后使用,否则直接在下面调用为nul,因为循环过后inputLine变成null!!!(按行读取)

    2024年02月12日
    浏览(56)
  • C/C++ 通过HTTP实现文件上传下载

    WinInet(Windows Internet)是 Microsoft Windows 操作系统中的一个 API 集,用于提供对 Internet 相关功能的支持。它包括了一系列的函数,使得 Windows 应用程序能够进行网络通信、处理 HTTP 请求、FTP 操作等。WinInet 提供了一套完整的网络通信工具,使得开发者能够轻松地构建支持网络功

    2024年02月19日
    浏览(47)
  • Java实现文件上传到服务器本地,并通过url访问

    Java实现文件上传到服务器本地,并通过url访问 有个需求,前端上传文件,需要用开关的方式同时支持上传七牛和服务器本地,方便不同的用户需求合理分配资源。本篇主要介绍文件上传到本地,然后通过url访问。 首先想到的就是可以通过SpringBoot通常访问静态资源的方式,当

    2024年02月03日
    浏览(60)
  • Java 根据网络地址URL获取文件

    系统需要根据提供的文件地址URL获取该文件,代码实现如下:

    2024年02月11日
    浏览(53)
  • vue如何通过$http的post方法请求下载二进制的Excel文件

    使用此function 使用此function, test.vue instanceName: \\\"exportExcel\\\",导出excel文件 instanceName: \\\"downloadLog\\\",下载.log后缀的txt文件 封装接口 代码中使用:

    2024年01月18日
    浏览(55)
  • 计算机网络 应用层上 | 域名解析系统DNS 文件传输协议FTP,NFS 万维网URL HTTP HTML

    之前我们讲运输层的时候已经讲了运输层可以给不同进程之间通信,但我们还需要应用层原因是,许多 应用需要多个进程之间相互配合完成,所以应用层进程用来约束这些配合! 每个应用层协议用来解决一个问题 应用层的许多协议都是基于客户服务器方式 客户是请求方,服

    2024年01月24日
    浏览(61)
  • Java通过文件流和文件地址下载文件

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

    2024年02月12日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包