java 文件下载 以字节读写

要求功能:点击下载链接,下载点击的文件

1.创建一个javaweb项目


2.创建一个简洁的jsp页面

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2017/12/5
  Time: 11:36
  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>
<form id="form" name="form" method="post" enctype="multipart/form-data" action="uploadServlet.do" >
    上传的文件:<input id="file" name="file" type="file"/>
    <button type="submit" name="btn" id="btn">提交</button></br>${result}
    </br>
    下载:<a href="downloadServlet.do?filename=${filename}" >${filename}</a>${errorresult}
</form>
</body>
</html>

3.创建servlet
package com.zj.servlet;

import javax.servlet.RequestDispatcher;
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.*;
import java.net.URLEncoder;

@WebServlet(name = "downloadServlet")
public class downloadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //获取下载文件的名称
        String filename=request.getParameter("filename");
        //获取文件下载的路径
        String path="E:/tempfiles/";
        //创建下载文件
        File downloadfile=new File(path+filename);
        //判断文件是否存在
        if (downloadfile.exists()){
            //设置文件的相应类型(另一种文件相应类型:application/octet-stream)
            response.setContentType("application/x-msdownload");
            response.setContentType("application/vnd.ms-excel;charset=uft-8");
            //设置头信息,URLEncoder.encode(filename,"utf-8")可以解决文件名乱码
            response.setHeader("Content-Disposition","attachment;filename=\""+URLEncoder.encode(filename,"utf-8")+"\"");

            //获取文件的输入流
            InputStream inputStream=new FileInputStream(downloadfile);
            //获取文件的输出流
            OutputStream outputStream=response.getOutputStream();
            //按字节循环读写内容
            byte[] bytes=new byte[1024];
            int n;
            while ((n=inputStream.read(bytes))!=-1){
                outputStream.write(bytes,0,n);
            }
            //关闭输入输出流
            outputStream.close();
            inputStream.close();
            //返回给页面的信息
            request.setAttribute("errorresult","下载完成!!");
            RequestDispatcher requestDispatcher=request.getRequestDispatcher("/01.jsp");
            requestDispatcher.forward(request,response);
        }else {
            request.setAttribute("errorresult","文件下载路径错误!!");
            RequestDispatcher requestDispatcher=request.getRequestDispatcher("/01.jsp");
            requestDispatcher.forward(request,response);
        }
    }
}

4.配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

<servlet>
    <servlet-name>uploadServlet</servlet-name>
    <servlet-class>com.zj.servlet.uploadServlet</servlet-class>
</servlet>
    <servlet>
        <servlet-name>downloadServlet</servlet-name>
        <servlet-class>com.zj.servlet.downloadServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>uploadServlet</servlet-name>
        <url-pattern>/uploadServlet.do</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>downloadServlet</servlet-name>
        <url-pattern>/downloadServlet.do</url-pattern>
    </servlet-mapping>


    <welcome-file-list>
        <welcome-file>01.jsp</welcome-file>
    </welcome-file-list>
</web-app>

 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值