zoukankan      html  css  js  c++  java
  • Jsp页面处理不在项目目录下的文件。

    最近在处理上传文件,由于上传的不在web项目目录下,所以在jsp页面用a标签直接连接地址是不可以下载的。

    后来百度和谷歌了之后,大家好像说jsp页面a标签的地址,在解析的时候,会默认去web项目下面寻找。而我们

    给的不是项目内的目录,所以是不会找到该文件的。

    后来找到一种方法,就是a标签链接到一个jsp页面,jsp页面进行处理。通过io流处理这个文件。

    方法如下:

    <%@page language="java" contentType="application/x-msdownload" import="java.io.*,java.net.*" pageEncoding="gb2312"%><% 
    /*
    从链接处传入path的参数如download.jsp?path=userfile/123.jpg,download.jsp为本页JSP
    注意path是tomcat下的相对路径
    */
    String id=request.getParameter("id");
    String temp=request.getParameter("path");
    if(temp==null)
     temp="";
    String path=new String(temp.getBytes("8859_1"),"gb2312");
    response.reset();
    response.setContentType("application/x-download");
    String filenamedownload = path;
    String filenamedisplay = path.substring(path.lastIndexOf("/")+1,path.length()); 
    filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8"); 
    response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay); 
    OutputStream output = null; 
    FileInputStream fis = null; 
    try 
        { 
            output  = response.getOutputStream(); 
            if(id.equals("1")){
               filenamedownload="/home/weblogic/documents/file/"+filenamedownload;
           
            } else if(id.equals("3")){
           
            } else{
               filenamedownload="/home/weblogic/documents/table/"+filenamedownload;
           
          }
    
            System.out.println("filenamedownload:"+filenamedownload);
            File file=new File(filenamedownload);
            if (!file.exists()){
              out.println("对不起,文件已删除");
              return;
            }
            fis = new FileInputStream(filenamedownload);
            
            byte[] b = new byte[1024]; 
            int i = 0; 
            while((i = fis.read(b)) > 0) 
            { output.write(b, 0, i); 
            } 
            output.flush(); 
        } 
        catch(Exception e) 
        { 
            System.out.println("Error!"); 
            e.printStackTrace(); 
        } 
        finally 
        { 
            if(fis != null) 
            { 
                fis.close(); 
                fis = null; 
            } 
            if(output != null) 
            { 
                output.close(); 
                output = null; 
            } 
        } 
    %>


     

  • 相关阅读:
    C库函数笔记
    曼彻斯特及差分曼彻斯特编码
    VS2008 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
    刚子扯谈:酒装狗熊胆
    poj1410
    新游戏《真·方块无双》发布-穿越混世过险境,运筹方块化无双
    hdu4267 A Simple Problem with Integers
    【转载】变量的存储类型
    【转载】硬盘存储原理和内部结构
    【转载】让windows使用linux系统的命令
  • 原文地址:https://www.cnblogs.com/ai03/p/3066235.html
Copyright © 2011-2022 走看看