Servlet下载文件(JavaWeb)

package com.xxx.file;

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

/**
 * @Author HPF
 * @Date 2023/5/19 9:03
 * description:
 */
@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("文件下载");

        //1.设置请求的编码格式
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");  //针对前端显示的文字乱码

        //2. 下载文件= 路径+文件名
        String fileName = request.getParameter("fileName");
            //输入的文件名合法?
        if (fileName == null || "".equals(fileName.trim())){
            response.getWriter().write("请输入文件名");
            response.getWriter().close();
        }

        String filePath  = request.getServletContext().getRealPath("/download/");//可下载的文件资源路径
        System.out.println("下载路径:"+filePath);

        File file = new File(filePath + fileName);

        //3.判断文件是否是文件类型
        if (file.exists() && file.isFile()){
            //设置响应类型
            response.setContentType("application/octet-stream");
            //设置响应头
            response.setHeader("Content-Disposition","attachment;filename="+fileName);
            //下载: 输入流、输出流
            FileInputStream in = new FileInputStream(file);
            ServletOutputStream out = response.getOutputStream();  //文件是字节输出流

            int len = 0 ;
            byte[] bytes = new byte[1024];
            //in.read(bytes)相当于把字节读入到byte[]里
            while (( len = in.read(bytes) )  != -1){
                out.write(bytes,0,len);
            }
            out.close();
            in.close();


        }else {
            response.getWriter().write("文件不合法,请重试");
            response.getWriter().close();
        }








    }
}

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>下载</title>
</head>
<body>
        <form action="downloadServlet">
            文件名: <input type="text" name="fileName" placeholder="请输入文件名">
            <button>下载</button>
        </form>

</body>
</html>

项目结构

 

1.当前项目路径

 

2.修改资源下载路径,如图。

 注意 /s07/downlaod的/s07  是当前项目的路径,参考上图。

3.注意java代码 ,getRealPath()的参数,就是咱们自己创建的 download目录的名字

String filePath  = request.getServletContext().getRealPath("/download/");//可下载的文件资源路径

4.基本就可以跑了。

弹出框下载

 

【注意】:上面忘记说了,java类名、包名自己创建,别直接copy哈;

                   前端页面名是download.html,自己新建,然后copy代码。

                   如果跑不通,记得删除out目录,再重启项目。                

                   这不是重点,自己可以跑着玩玩,不用太担心。

 

注:下文中的 *** 代表文件名中的版本号。 # 【javax.servlet-api-***.jar中文文档.zip】 中包含: 中文文档:【javax.servlet-api-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【javax.servlet-api-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【javax.servlet-api-***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【javax.servlet-api-***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【javax.servlet-api-***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【javax.servlet-api-***.jar中文文档.zip】,再解压其中的 【javax.servlet-api-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件; # Maven依赖: ``` <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>***</version> </dependency> ``` # Gradle依赖: ``` Gradle: implementation group: 'javax.servlet', name: 'javax.servlet-api', version: '***' Gradle (Short): implementation 'javax.servlet:javax.servlet-api:***' Gradle (Kotlin): implementation("javax.servlet:javax.servlet-api:***") ``` # 含有的 Java package(包): ``` javax.servlet javax.servlet.annotation javax.servlet.descriptor javax.servlet.http ``` # 含有的 Java class(类)(此处仅列举3个): ``` javax.servlet.AsyncContext javax.servlet.AsyncEvent javax.servlet.AsyncListener ...... ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值