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; 
            } 
        } 
    %>


     

  • 相关阅读:
    InstallShield高级应用获取机机所有ORACLE服务列表
    InstallShield高级应用测试ORACL是否可连接
    [分享]Asp.net 页面加载顺序及常用页面事件规律
    InstallShield高级应用检查是否安装ORACLE或SQL Server
    InstallShield高级应用打开文件对话框
    InstallShield高级应用检测系统ServerPack版本,SP2前不支持则 abort
    InstallShield高级应用文件操作
    InstallShield高级应用系列目录
    c# 常用区别总结
    InstallShield高级应用测试Access是否可连接
  • 原文地址:https://www.cnblogs.com/ai03/p/3066235.html
Copyright © 2011-2022 走看看