文件的处理操作
不得不说,在一次次的学习过程中,我慢慢的明白了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里面会自动调用
如果存在不理解的地方或错误,欢迎指正
· 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语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决