b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

jsp中实现文件下载的最简单的方式是什么?

电脑杂谈  发布时间:2021-04-14 13:02:42  来源:网络整理

在JSP中下载文件的最简单方法是在网页上创建超链接,例如:href =“” music / abc.mp3“并单击下载。但是,服务器上的目录资源将直接暴露给最终用户,这将给网站带来一些不安全因素。因此,可以使用其他方法来实现下载,可以在以下方法中执行:1、 RequestDispatcher; 2、以文件流输出的形式下载。

1、使用RequestDispatcher方法:

<% 
      response.setContentType("application/x-download");//设置为下载application/x-download 
      String filedownload = "/要下载的文件名";//即将下载的文件的相对路径 
      String filedisplay = "最终要显示给用户的保存文件名";//下载文件时显示的文件保存名称 
      filenamedisplay = URLEncoder.encode(filedisplay,"UTF-8"); 
      response.addHeader("Content-Disposition","attachment;filename=" + filedisplay); 
      try 
      { 
          RequestDispatcher dis = application.getRequestDispatcher(filedownload); 
          if(dis!= null) 
          { 
              dis.forward(request,response); 
          } 
          response.flushBuffer(); 
      } 
      catch(Exception e) 
      { 
          e.printStackTrace(); 
      } 
      finally 
      { 
      } 
%>

2、使用文件流输出下载

<%@ page import="java.io.OutputStream" %>
<%@ page import="java.io.FileInputStream" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page language="java" contentType="application/x-msdownload" pageEncoding="UTF-8" %>
<%
    //关于文件下载时采用文件流输出的方式处理:
    String bath = request.getSession().getServletContext().getRealPath("");
    response.setContentType("application/x-download");
    String fileDownloadName = bath + request.getParameter("fileDownloadName"); // 下载的文件的物理路径+文件名
    String fileDisplayName = String.valueOf(System.currentTimeMillis())+fileDownloadName.substring(fileDownloadName.lastIndexOf("."),fileDownloadName.length()); // 给用户提供的下载文件名
    fileDisplayName = URLEncoder.encode(fileDisplayName, "UTF-8");
    response.addHeader("Content-Disposition", "attachment;filename=" + fileDisplayName);
    OutputStream outp = null;
    FileInputStream in = null;
    try {
        outp = response.getOutputStream();
        in = new FileInputStream(fileDownloadName);
        byte[] b = new byte[1024];
        int i = 0;
        while ((i = in.read(b)) > 0) {
            outp.write(b, 0, i);
        }
        outp.flush();
    } catch (Exception e) {
        System.out.println("文件下载失败!");
        e.printStackTrace();
    } finally {
        if (in != null) {
            in.close();
            in = null;
        }
        if (outp != null) {
            outp.close();
            outp = null;
            out.clear();
            out = pageContext.pushBody();
        }
    }
%>

对于第二种方法,我认为应该更常用。但是,有几点值得我们注意:

一、使用第二种方法的主要优点是,实际文件的存储路径对客户端是透明的。

此文件可以存在于服务器可以获取的任何位置,但是客户端可能无法直接获取它。例如,文件来自内部网络上的或FTP服务器。换句话说,此方法可以隐藏实际文件的URL地址。

二、为了防止客户端浏览器直接打开目标文件(例如,带有MS Office套件的Windows中的IE浏览器可能会直接打开要在IE浏览器中下载的doc或xls文件),您必须在响应标头中添加强制下载MIME类型:

response.setContentType(“ application / force-download”); //设置为下载应用程序/ force-download

这样,您可以确保当用户单击下载链接时,浏览器将弹出一个提示窗口,询问您是否要下载或直接打开它,并允许您选择要打开的应用程序,除非您进行了设置浏览器的一些默认行为。

或者,如果您希望客户端自己处理各种文件类型,则可以在服务器配置文件中配置MIME类型映射,并通过简单地判断文件扩展名来处理它。例如,在Tomcat中设置MIME响应类型:

如果客户端中文件的响应者类型与期望的不一致,请修改$ TOMCAT_HOME \ conf \ web.xml文件中的以下部分:

zip

应用程序/邮政编码

jsp格式文件怎么打开_jsp打开word_jsp怎么超链接打开word文件

mht

message / rfc822

……

三、尽量不要在响应标头中设置浏览器缓存时间。

有时,用户单击下载链接后,在弹出窗口中,用户希望直接单击“打开”而不是保存到指定路径。目前,如果我们在响应头中限制浏览器缓存(即始终刷新),则将无法直接在IE浏览器中打开文件。由于不允许使用缓存的限制,浏览器无法将文件保存到临时文件夹(即缓存)。

换句话说,不要在响应头中设置以下设置(注释):

// response.addHeader(“ pragma”,“ NO-cache”);

jsp怎么超链接打开word文件_jsp打开word_jsp格式文件怎么打开

// response.addHeader(“ Cache-Control”,“ no-cache”);

// response.addDateHeader(“ Expries”,0);

四、文件名是中文或其他Unicode字符时的处理。

有时提供下载的文件名包含中文字符或其他Unicode字符,这将导致浏览器无法正确使用默认文件名保存文件。我们应该记得在响应头中包含文件名字段,并使用ISO8859-1编码(推荐)或UTF-8编码:

response.setHeader(“ Content-disposition”,“ attachment; filename =” + new String(filename.getBytes(“ UTF-8”),“ iso8859-1”))); //使用ISO8859-1编码

response.setHeader(“ Content-disposition”,“ attachment; filename =” + URLEncoder.encode(filename,“ UTF-8”));; //使用UTF-8编码

但是,此方法在不同的浏览器中的执行方式有所不同。例如,在IE和Firefox中,ISO8859-1编码可以正确显示文件名,但是在Opera中,无论使用哪种编码,默认情况下保存的文件名都无法正确显示。

所以最好的方法是尽可能在文件名中使用ascii编码。

五、由于使用流技术进行输入和输出,因此我们必须确保在使用后关闭流技术资源。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-368176-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...