加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

用Servlet把文件写到Respond输出流里面供用户下载

发布时间:2020-05-24 21:36:31 所属栏目:Java 来源:互联网
导读:用Servlet把文件写到Respond输出流里面供用户下载

下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。

脚本之家小编现在分享给大家,也给大家做个参考。

download.java里面的代码,获取服务端存放文件的真实路径之后,把这个文件先写到缓冲区,再把缓冲区的东西写到respond输出流供用户下载。
    import java.io.*;  
    import java.net.*;  
    import javax.servlet.*;  
    import javax.servlet.http.*;  
    import javax.servlet.annotation.*;  
      
    @WebServlet(name = "download",urlPatterns = { "/download" })  
    public class download extends HttpServlet {  
        private static final long serialVersionUID = 1L;  
      
        protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {  
            String filePath = this.getServletContext().getRealPath("/");// 获取真实路径  
            String downloadFilename = "中文是没有问题的.jpg";// 在下载框默认显示的文件名  
            downloadFilename = URLEncoder.encode(downloadFilename,"UTF-8");  
            // 对默认下载的文件名编码。不编码的结果就是,在客户端下载时文件名乱码  
            File file = new File(filePath + File.separator + "Chrysanthemum.jpg");  
            if (file.exists()) {  
                // 写明要下载的文件的大小  
                response.setContentLength((int) file.length());  
                response.setHeader("Content-Disposition","attachment;filename="  
                        + downloadFilename);// 设置在下载框默认显示的文件名  
                response.setContentType("application/octet-stream");// 指明response的返回对象是文件流  
                // 读出文件到response  
                // 这里是先需要把要把文件内容先读到缓冲区  
                // 再把缓冲区的内容写到response的输出流供用户下载  
                FileInputStream fileInputStream = new FileInputStream(file);  
                BufferedInputStream bufferedInputStream = new BufferedInputStream(  
                        fileInputStream);  
                byte[] b = new byte[bufferedInputStream.available()];  
                bufferedInputStream.read(b);  
                OutputStream outputStream = response.getOutputStream();  
                outputStream.write(b);  
                // 人走带门  
                bufferedInputStream.close();  
                outputStream.flush();  
                outputStream.close();  
            }  
        }  
    }  

以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读