posts - 710,  comments - 81,  views - 260万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
复制代码
 1 public void doPost(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {
 3 
 4           //创建要下载的文件的对象(参数为要下载的文件在服务器上的路径)
 5            File serverFile=new File("D:/myText.doc");
 6            
 7            //设置要显示在保存窗口的文件名,如果文件名中有中文的话,则要设置字符集,否则会出现乱码。另外,要写上文件后缀名
 8            String fileName=java.net.URLEncoder.encode("Java编程思想最新版.doc","utf-8");
 9            //该步是最关键的一步,使用setHeader()方法弹出"是否要保存"的对话框,打引号的部分都是固定的值,不要改变
10            response.setHeader("Content-disposition","attachment;filename="+fileName);
11           
12            /*
13             * 以下四行代码经测试似乎可有可无,可能是我测试的文件太小或者其他什么原因。。。
14             */
15            response.setContentType("application/msword");
16            //定义下载文件的长度 /字节
17            long fileLength=serverFile.length();
18            //把长整形的文件长度转换为字符串
19            String length=String.valueOf(fileLength);
20            //设置文件长度(如果是Post请求,则这步不可少)
21            response.setHeader("content_Length",length);
22            
23            /*
24             *以上内容仅是下载一个空文件
25             *以下内容用于将服务器中相应的文件内容以流的形式写入到该空文件中
26             */
27            //获得一个 ServletOutputStream(向客户端发送二进制数据的输出流)对象
28            OutputStream servletOutPutStream=response.getOutputStream();
29            //获得一个从服务器上的文件myFile中获得输入字节的输入流对象
30            FileInputStream fileInputStream=new FileInputStream(serverFile);
31            
32            
33            byte bytes[]=new byte[1024];//设置缓冲区为1024个字节,即1KB
34            int len=0;
35            //读取数据。返回值为读入缓冲区的字节总数,如果到达文件末尾,则返回-1
36            while((len=fileInputStream.read(bytes))!=-1)
37            {   
38                //将指定 byte数组中从下标 0 开始的 len个字节写入此文件输出流,(即读了多少就写入多少)
39                servletOutPutStream.write(bytes,0,len); 
40            }
41            
42            servletOutPutStream.close();
43            fileInputStream.close();           
44     }
复制代码

 程序员的基础教程:菜鸟程序员

posted on   itprobie-菜鸟程序员  阅读(420)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示