返回顶部

Java Web实现使用浏览器从服务器下载文件(后台)

Java Web实现 使用浏览器从服务器下载文件。
下面实现两种情况的下载,需求如下:

需求(一):
1、用户在页面填写表单。
2、填写完成后,选择下载,将表单内容发往后台。
3、后台根据内容生产一个文件,发送给前端。
4、前端成功下载文件到本地。
此需求简单来说就是,用户在页面上填写内容,然后将内容转变成文件的形式。

后台设计思路:
1、首先拿到前端发送过来的内容。
2、将内容解析,存放至缓冲区。
3、设置响应头。
4、将缓冲区里的内容,以流的方式写出。

代码实现:

复制代码
public void download(HttpServletResponse response){
        JSONObject json = new JSONObject();
        /* 假设这是前端使用JSON放过来的数据 */
        json.put("A","1");
        json.put("B","2");
        json.put("C","3");
        /* 遍历JSON,将JSON的值放至缓冲区 */
        StringBuilder sb = new StringBuilder();
        Iterator it = json.keys();
        while(it.hasNext()){
            String key =  (String)it.next();
            String value = (String)json.get(key);
            sb.append(key).append("=").append(value).append("\n");
        }
        /*  设置文件ContentType类型,这样设置,会自动判断下载文件类型   */
        response.setContentType("application/multipart/form-data");
        /* 设置文件头:最后一个参数是设置下载文件名(假如我们叫a.ini)   */
        response.setHeader("Content-Disposition", "attachment;filename=a.ini");
        try{
            /* 用流将数据写给前端 */
            OutputStream os = response.getOutputStream();
            os.write(sb.toString().getBytes());
            os.flush();
            os.close();
        }catch (IOException ioe){
            ioe.printStackTrace();
        }
    }
复制代码

 




需求(二):
1、用户指定下载什么文件。
2、成功下载文件到本地。

后台设计思路:
1、首先获取前端需要下载什么文件。
2、找到文件在服务器上面的路径。
3、将文件读进内存
4、将文件以流的方式写出。

代码实现:

复制代码
 public void download() throws  IOException{
        //获取服务器文件
        File file = new File("/home/a.txt");

        InputStream ins = new FileInputStream(file);
        /* 设置文件ContentType类型,这样设置,会自动判断下载文件类型 */
        response.setContentType("multipart/form-data");
        /* 设置文件头:最后一个参数是设置下载文件名 */
        response.setHeader("Content-Disposition", "attachment;filename="+file.getName());
        try{
            OutputStream os = response.getOutputStream();
            byte[] b = new byte[1024];
            int len;
            while((len = ins.read(b)) > 0){
                os.write(b,0,len);
            }
            os.flush();
            os.close();
            ins.close();
        }catch (IOException ioe){
           ioe.printStackTrace();
        }
    }
复制代码

 

链接:https://blog.csdn.net/qq_28082757/article/details/72771166

posted @   fen斗  阅读(15570)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示