java实现文件下载功能

java实现文件下载功能文件下载功能已经成为现代 Web 应用程序不可或缺的一部分 java 文件下载

大家好,欢迎来到IT知识分享网。

目录

单个下载(流)

1、设置响应类型和头信息

2、实现文件输出

单个下载(本地文件)

1、文件读取

2、设置响应类型和头信息

3、实现文件输出

单个下载(网络文件)

1、与服务器建立连接

2、设置响应类型和头信息

3、实现文件输出

压缩ZIP下载

1、设置响应类型和头信息

2、创建压缩流

3、向压缩文件中输出数据

批量下载


文件下载功能已经成为现代Web应用程序不可或缺的一部分。

单个下载(流)
1、设置响应类型和头信息
response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

Content-Type:用于指示接收方如何处理响应数据,并告知浏览器所需下载的文件类型

attachment:用于指示浏览器以下载方式显示响应数据

filename:用于指定下载文件的文件名

2、实现文件输出
InputStream in = obsUploadUtils.downFile(url); OutputStream out = response.getOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } in.close(); out.close();

1.获取一个输入流,并将其用于访问服务器上的文件

2.使用ServletOutputStream类的getOutputStream()方法创建一个数据输出流,并将其用于输出文件数据

3.while循环逐个读取文件数据,并将其写入到输出流中

4.关闭输入输出流

单个下载(本地文件)
1、文件读取
InputStream in = new FileInputStream("c:/Operator.doc");

通过打开与实际文件的连接创建一个FileInputStream,传递一个String类型的文件路径

2、设置响应类型和头信息
response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

Content-Type:用于指示接收方如何处理响应数据,并告知浏览器所需下载的文件类型

attachment:用于指示浏览器以下载方式显示响应数据

filename:用于指定下载文件的文件名

3、实现文件输出
OutputStream out = response.getOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } in.close(); out.close();

1.获取一个输入流,并将其用于访问服务器上的文件

2.使用ServletOutputStream类的getOutputStream()方法创建一个数据输出流,并将其用于输出文件数据

3.while循环逐个读取文件数据,并将其写入到输出流中

4.关闭输入输出流

单个下载(网络文件)
1、与服务器建立连接
URL url = new URL(“”); URLConnection conn = url.openConnection(); InputStream in = conn.getInputStream(); 

1.在url中输入要解析的网络文件路径

2.通过在 URL 上调用 openConnection 方法创建连接对象

3.通过getInputStream()获取对象的输入流

2、设置响应类型和头信息
response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

Content-Type:用于指示接收方如何处理响应数据,并告知浏览器所需下载的文件类型

attachment:用于指示浏览器以下载方式显示响应数据

filename:用于指定下载文件的文件名

3、实现文件输出
OutputStream out = response.getOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } in.close(); out.close();

1.获取一个输入流,并将其用于访问服务器上的文件

2.使用ServletOutputStream类的getOutputStream()方法创建一个数据输出流,并将其用于输出文件数据

3.while循环逐个读取文件数据,并将其写入到输出流中

4.关闭输入输出流

压缩ZIP下载
1、设置响应类型和头信息
response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

Content-Type:用于指示接收方如何处理响应数据,并告知浏览器所需下载的文件类型

attachment:用于指示浏览器以下载方式显示响应数据

filename:用于指定下载文件的文件名

2、创建压缩流
 ZipOutputStream out = new ZipOutputStream(response.getOutputStream());

用于将数据压缩为ZIP文件格式。它提供了一种方便的方式来创建包含多个文件或目录的ZIP文件

response.getOutputStream():用于写入ZIP文件数据的输出流

3、向压缩文件中输出数据
 for (String object : objectLists) { ObsObject obsObject = obsClient.getObject(bucketName,object); String objectKey = obsObject.getObjectKey(); if (!objectKey.endsWith("/")){ int index = objectKey.lastIndexOf("/"); String fileName = objectKey.substring(index+1); out.putNextEntry(new ZipEntry(fileName)); InputStream in = obsObject.getObjectContent(); int b; while ((b = in.read())!=-1){ out.write(b); } } }
批量下载
public class MultiThreadDownloader { private static final int BUFFER_SIZE = 4096; private static final int NUM_THREADS = 4; public static void main(String[] args) { List<String> urls = new ArrayList<>(); urls.add("https://example.com/file1.txt"); urls.add("https://example.com/file2.txt"); urls.add("https://example.com/file3.txt"); urls.add("https://example.com/file4.txt"); int numFiles = urls.size(); int numThreads = Math.min(numFiles, NUM_THREADS); List<Thread> threads = new ArrayList<>(); for (int i = 0; i < numThreads; i++) { int start = i * numFiles / numThreads; int end = (i + 1) * numFiles / numThreads; List<String> subUrls = urls.subList(start, end); Thread thread = new DownloadThread(subUrls); thread.start(); threads.add(thread); } for (Thread thread : threads) { try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } } } private static class DownloadThread extends Thread { private List<String> urls; public DownloadThread(List<String> urls) { this.urls = urls; } @Override public void run() { for (String url : urls) { try { downloadFile(url); } catch (IOException e) { e.printStackTrace(); } } } private void downloadFile(String urlStr) throws IOException { URL url = new URL(urlStr); String fileName = url.getFile().substring(url.getFile().lastIndexOf('/') + 1); BufferedInputStream in = new BufferedInputStream(url.openStream()); FileOutputStream out = new FileOutputStream(fileName); byte[] buffer = new byte[BUFFER_SIZE]; int bytesRead; while ((bytesRead = in.read(buffer, 0, BUFFER_SIZE)) != -1) { out.write(buffer, 0, bytesRead); } in.close(); out.close(); } } 

1.将下载的文件 URL 存储在一个列表中,然后将其分成多个子列表,每个子列表由一个线程处理

2.每个线程都会遍历其子列表中的 URL,并下载每个文件

3.下载的文件将保存在当前工作目录中,文件名将从 URL 中提取

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/113152.html

(0)
上一篇 2025-12-24 17:45
下一篇 2026-01-14 07:01

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信