javaweb实现下载

打印 上一主题 下一主题

主题 895|帖子 895|积分 2685

实现代码

java代码
  1. package com.kuang.servlet;<br>​<br>import javax.servlet.ServletException;<br>import javax.servlet.ServletOutputStream;<br>import javax.servlet.http.HttpServlet;<br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;<br>import java.io.FileInputStream;<br>import java.io.IOException;<br>import java.net.URLEncoder;<br>​<br>public class FileServlet extends HttpServlet {<br>    @Override<br>    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {<br>        //1、获取要下载的文件路径,<br>        String realPath ="E:\\javaweb-02-servlet\\response\\src\\main\\resources\\XXX.jpg";<br>        System.out.println("文件下载路径" + realPath);<br>        //2、需要下载的文件名是啥?<br>        //realPath.lastIndexOf("\")查找“\\”最后出现的位置<br>        System.out.println(realPath.lastIndexOf("\"));<br>        String fileName = realPath.substring(realPath.lastIndexOf("\") + 1);<br>        //3、设置想办法让浏览器支持(content—Disposition)下载我们需要的东西,中文文件名URLEnconder.encode编码,否则可能会有乱码。<br>        resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8"));<br>        //4、获取下载文件的输入流<br>        FileInputStream in = new FileInputStream(realPath);<br>        //5、创建缓冲区<br>        int len = 0;<br>        byte[] buffer =new byte[1024];<br>        //6、获取OutpuStrean对象<br>        ServletOutputStream out = resp.getOutputStream();<br>        // 7. 将FileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区中的数据输出到客户端!<br>        while((len=in.read(buffer))>0){<br>            out.write(buffer,0,len);<br>        }<br>​<br>        in.close();<br>        out.close();<br>​<br>    }<br>​<br>    @Override<br>    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {<br>        doGet(req, resp);<br>    }<br>}<br>​
复制代码
web.xml中注册:
  1. <servlet><br>    <servlet-name>fileservlet</servlet-name><br>    <servlet-class>com.kuang.servlet.FileServlet</servlet-class><br></servlet><br><servlet-mapping><br>    <servlet-name>fileservlet</servlet-name><br>    <url-pattern>/download</url-pattern><br></servlet-mapping>
复制代码
Typora快捷整理代码“shift+tab”;
代码分析

1、分割文件路径获得文件名称。
  1. String fileName = realPath.substring(realPath.lastIndexOf("\") + 1);
复制代码
lastIndexOf("\\")返回"\\"的索引需要加1(lastIndexOf索引从1开始,substring索引从0开始),给substring(beginIndex ,endIndex ),获得文件名字。
substring(beginIndex ,endIndex )


  • beginIndex -- 起始索引(包括), 索引从 0 开始。
  • endIndex -- 结束索引(不包括)。
比如substring(4,10)表示取出从0开始数,索引4到索引10之间的字符串。
比如substring(4)表示取出从0开始数,索引4到结束的字符串。
例子:
  1. public class RunoobTest {<br>    public static void main(String args[]) {<br>        String Str = new String("This is text");<br> <br>        System.out.print("返回值 :" );<br>        System.out.println(Str.substring(4) );<br> <br>        System.out.print("返回值 :" );<br>        System.out.println(Str.substring(4, 10) );<br>    }<br>}
复制代码
运行结果是:
  1. 返回值 : is text<br>返回值 : is te
复制代码
lastIndexOf()
  1. lastIndexOf(String str, int fromIndex)
复制代码
str:需要检索的字符串,fromIndex:索引位,lastlndexOf是反向索引。lastIndexOf(qwe,10),会返回从0到第10位最后一个qwe的索引。
  1. lastIndexOf(String str)
复制代码
str:需要检索的字符串,lastIndex(qwe),返回最后一个qwe字符串索引。
例子:
  1. String Str = new String("菜鸟教程:www.runoob.com");<br>​<br>System.out.print("查找字符 o 最后出现的位置 :" );<br>System.out.println(Str.lastIndexOf( 'o' ));<br>​<br>System.out.print("从第14个位置查找字符 o 最后出现的位置 :" );<br>System.out.println(Str.lastIndexOf( 'o', 14 ));
复制代码
运行结果:
  1. 查找字符 o 最后出现的位置 :17<br>从第14个位置查找字符 o 最后出现的位置 :13              
复制代码
  
 
 
 
 
 
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

干翻全岛蛙蛙

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表