文件的处理操作

不得不说,在一次次的学习过程中,我慢慢的明白了web操作的一些常见的问题关于路径的问题也渐渐明白了

复制代码
<%--
  Created by IntelliJ IDEA.
  User: mr.wang
  Date: 2021/10/31
  Time: 22:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
<%--创建不同的接收方式--%>
<%--将数据传到servlet里面--%>
  <a href="/_war_exploded/download?type=png">猫粮</a>
<hr/>
  <a href="/_war_exploded/download?type=txt">java学习资源包</a>
  </body>
</html>
复制代码

上面为最基本的前端的跳转界面

将数据跳转到指定的servlet里面

复制代码
package com.wx.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

@WebServlet("/download")
public class DownloadServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//      获取要下载的文件的类型
        String type = req.getParameter("type");
//      先设置文件名为空
        String fileName="";
//        判断文件的格式类型
        switch (type) {
            case"png":{
                fileName = "1.png";
                        break;
            }
            case "txt":{
                fileName = "javadata.txt";
                break;
            }
        }
        //设置响应的方式,下面是下载之后的文件名
        resp.setContentType("application/x-msdownload");
//        String fileName = "1.png";
        //设置下载后的文件名,其他地方都是写死的
        resp.setHeader("Content-Disposition","attachment;filename="+fileName);
        //获取输出流
        OutputStream outputStream =resp.getOutputStream();
        String path = req.getServletContext().getRealPath("file/"+fileName);
        InputStream inputStream = new FileInputStream(path);
        int temp = 0;
//      循环操作
        while ((temp = inputStream.read())!=-1) {
            outputStream.write(temp);
        }

        //关闭输入与输出流
        inputStream.close();
        outputStream.close();
    }

}
复制代码

然后在servlet里面进行操作,返回数据资源

 

 这样你就可以正常的进行文件的下载操作了

 

 当然你要在这里放好你的文件

 

 当然在index里面的的那个传type的操作在servlet里面如果想要接收,还是必须得是doget方法,dopost没有此操作

后来发现响应方式可以不用加??

因为你的resp里面会自动调用

如果存在不理解的地方或错误,欢迎指正

posted @   湖南陈冠希  阅读(51)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示