自学内容网 自学内容网

浏览器向客户端提供文件下载(Java实现)

场景:
某一系统需上传黑白名单时,需向用户提供导入模板,这时候需要为客户端提供文件模板下载,用户按照该模板格式填写内容。

package com.wyw.learn.upOrdownload.service;

import lombok.RequiredArgsConstructor;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.net.URLEncoder;

/**
 * @author name:    silk
 * @version 1.0
 * @description: TODO
 * @date 2024/7/4 20:38
 */
@Service
@RequiredArgsConstructor
public class TestServiceImpl {

    public void download(HttpServletRequest request, HttpServletResponse response) {
        try {
            // 这个zip文件要放在根目录地下的template文件夹下
            String path = "template/黑/白名单导入模板.zip";
            ClassPathResource resource = new ClassPathResource(path);
            // 读取到流中
            try (InputStream inputStream = resource.getInputStream()){
                String filename = new File(path).getName();
                // 重置响应对象。比如:清空缓冲区、重置响应头、重置响应状态码、取消响应内容的提交
                response.reset();
                // 告诉浏览器或其他客户端程序不要解析响应的内容,而是将其作为二进制数据下载到本地。如果是 application/octet-stream,浏览器会提示用户下载文件,而不是尝试在浏览器中打开它
                // Content-Disposition 告诉浏览器以附件形式下载文件,并指定下载时使用的文件名。这样,浏览器会提示用户下载 filename 文件,而不是在浏览器中打开它
                response.setContentType("application/octet-stream");
                response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));
                ServletOutputStream outputStream = response.getOutputStream();
                byte[] b = new byte[1024];
                int len;
                // 从输入流中读取一定量的字节,并将其存储在缓冲区字节数组中,读到末尾返回-1
                while ((len = inputStream.read(b)) > 0) {
                    outputStream.write(b, 0 ,len);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


原文地址:https://blog.csdn.net/2301_81922209/article/details/140190238

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!