zoukankan      html  css  js  c++  java
  • jsp中打开pdf文件:中文目录(中文文件名)问题

    http://topic.csdn.net/t/20030919/16/2279308.html

    楼主lymkelly(柳叶眉)2003-09-19 16:25:31 在 Java / Web 开发 提问

    jsp中打开pdf文件:中文目录(中文文件名)问题  
      我的  
      直接打开  
      或者  
      用输入输出流  
      的  
      英文的目录,文件名实现了  
       
      但是,中文的目录名,文件名实现不了  
      上面的实现在另外一个贴字里http://expert.csdn.net/Expert/topic/2271/2271350.xml?temp=.7396814  
       
      还望大虾帮助,不胜感激 问题点数:0、回复次数:40Top

    1 楼majorinjava(编程浪子)回复于 2003-09-19 16:56:38 得分 0

    这是因为中文地址编码的问题,你可以这样去实现。  
      <%@   page   import="java.net.*"   %>  
      <%  
          String   addr=URLEncoder.encode("文件测试.doc");  
      %>  
      <a   href="<%=addr%>">   文件测试.doc   </a>Top

    2 楼GaoLun(高论)回复于 2003-09-19 17:08:04 得分 0

    同意楼上的,  
      应为JSP本该就有中文问题!Top

    3 楼smartzhang(每天多学一点)回复于 2003-09-19 17:31:10 得分 0

    用的什么服务器  
      具体问题具体分析Top

    4 楼lymkelly(柳叶眉)回复于 2003-09-19 21:40:16 得分 0

    用的tomcat4  
      Top

    5 楼lymkelly(柳叶眉)回复于 2003-09-19 21:46:09 得分 0

    不是不是  
      to:majorinjava(编程浪子)    
      word的文件没有问题  
      pdf的不可以Top

    6 楼lymkelly(柳叶眉)回复于 2003-09-19 22:50:00 得分 0

    希望大虾帮助!!  
      非常感谢!!!!!!!!!Top

    7 楼liad()回复于 2003-09-21 15:22:37 得分 0

    用apache   http   server整合tomcat试试  
       
      下面只用apache   http   server,  
      在IE中用  
      file:///E:/Apache/htdocs/雅思英语学习/东方雅思资料.pdf  
      http://localhost/%D1%C5%CB%BC%D3%A2%D3%EF%D1%A7%CF%B0/%B6%AB%B7%BD%D1%C5%CB%BC%D7%CA%C1%CF.pdf  
      可以正常打开文件  
       
      用  
      http://localhost/雅思英语学习/东方雅思资料.pdf  
      提示  
      HTTP   404   -   File   not   found  
      Internet   Explorer    
       
      Top

    8 楼lymkelly(柳叶眉)回复于 2003-09-22 11:48:00 得分 0

    非常感谢liad()   ,你真是给了我黑暗中的一缕光明!  
      我去试一试,Top

    9 楼lymkelly(柳叶眉)回复于 2003-09-22 16:16:56 得分 0

    我现在还没有尝试出来  
      不过呢  
      用apach以后我的htm网页都成了乱码了!!  
      Top

    10 楼Alps_lou(云飞扬)回复于 2003-09-22 16:31:51 得分 0

    在tomcat的web.xml中加上一下的内容  
      <mime-mapping>  
              <extension>pdf</extension>  
              <mime-type>application/pdf</mime-type>  
      </mime-mapping>Top

    11 楼lymkelly(柳叶眉)回复于 2003-09-22 16:42:18 得分 0

    to:liad()   (   )    
      如果大虾的可以的话  
      请详细说明  
       
      我得不可以  
      555555555555555555555  
      急盼!!!!!!!!!!!!!Top

    12 楼lymkelly(柳叶眉)回复于 2003-09-22 17:23:51 得分 0

    to:Alps_lou(云飞扬)   (  
      我修改的我的发行目录(wabapp)下的web.xml  
      还是不行  
       
      不过呢  
      我觉得问题应该和这个有关  
      :因为   office的.doc等等的打开都没有问题的  
      但是中文url编码以后呢  
      所有的都不行了Top

    13 楼kinoviti(-=K.V=-)回复于 2003-09-22 19:22:42 得分 0

    首先,尝试使用   修改mime来解决  
      其次,如果是先显示目录再点击进入另一个jsp打开对应的pdf,这个就需要作  
      一些比较麻烦的操作。  
      比如从A.jsp(目录文件)到   B.jsp(pdf打开)  
      从A到B传送的文件名会被IE重新编码,与此同时IE这个时候只能认识  
      %as%sd%...这种格式的16进制汉字编码,你要做的就是先把得到的文件名  
      进行ISO-8859-1   /   UTF-8编码   然后对编码后产生的Byte数组进行依次  
      编码为16进制,组成一个字符串,同时再每一位转换成的16进制头尾分别  
      加上%     这样就可以了。  
      以上   我是基于Tomcat+Unix作服务器的经验。  
      如果其他方式能够实现,请赐教Top

    14 楼lymkelly(柳叶眉)回复于 2003-09-22 19:49:46 得分 0

    to:kinoviti(-=K.V=-)   (  
      大虾说得比较高深  
      我不是太理解  
      可是有个问题阿  
      为什么   word等的文件不需要字符转换呢  
       
      Top

    15 楼lymkelly(柳叶眉)回复于 2003-09-22 20:14:20 得分 0

    可是  
      为什么  
      word的文档可以呢  
      中文的文件名也可以打开Top

    16 楼lymkelly(柳叶眉)回复于 2003-09-22 20:16:24 得分 0

    http://127.0.0.1:8080/kyglxxxt/PROJECT/开发/2003/张国立/申请书.doc  
      就可以打开Top

    17 楼csdnxw(大家帮忙)回复于 2003-09-23 09:55:15 得分 0

    这位老兄跟张兄认识?Top

    18 楼lymkelly(柳叶眉)回复于 2003-09-23 15:33:44 得分 0

    没有  
      是我们学校的一位老师的名字本来在那里  
      不过我怕发上去万一。。。。。。不太好  
      就想一个名字吧。。。。。嘻嘻   张兄的名字就出来了  
      哈哈  
       
      Top

    19 楼lymkelly(柳叶眉)回复于 2003-09-23 15:35:10 得分 0

    哎呀,我的问题还没有解决呢  
      怎么还没有人回答阿555555555555555555555555555555555Top

    20 楼liad()回复于 2003-09-23 16:18:23 得分 0

    完整的  
      //   DispPDF.java  
       
      package   pdf;  
       
      import   java.io.*;  
      import   java.net.*;  
      import   java.util.*;  
      import   javax.servlet.*;  
      import   javax.servlet.http.*;  
       
      public   class   DispPDF   extends   HttpServlet  
      {  
      public   void   doGet(HttpServletRequest   request,   HttpServletResponse   response)   throws   ServletException,   IOException    
      {  
      InputStream   in   =   null;  
      ServletOutputStream   out   =   null;  
       
      try   {  
      response.reset();  
      out   =   response.getOutputStream();  
      response.setContentType("application/pdf");  
      in   =   new   BufferedInputStream(new   FileInputStream(getServletContext().getRealPath("/")   +   "测试/文档.pdf"));  
      int   ch;  
       
      while   (   (ch   =   in.read())   !=   -1   )   {  
      out.print(   (char)ch   );  
      }  
      }   catch   (Exception   e)   {  
      e.printStackTrace();  
      }   finally   {  
      if(   in   !=   null   )   {  
      in.close();  
      }  
      if(   out   !=   null   )   {  
      out.flush();  
      out.close();  
      }  
      }  
      }    
      }  
      Top

    21 楼lymkelly(柳叶眉)回复于 2003-09-23 17:13:36 得分 0

    谢谢liad()   (:  
      我去试一下  
      Top

    22 楼intelchen(intelchen)回复于 2003-09-23 17:42:18 得分 0

    个人觉得kinoviti(-=K.V=-)   那个是正解,  
      但是我不确定最后一句话“同时再每一位转换成的16进制头尾分别  
      加上%”  
      如果我的路径是“http://localhost/english/雅     思/雅思英语学习/东方雅思资料.pdf”  
      对应到我的文件系统的路径是"c:/tomcat/webapps/english/雅     思/雅思英语学习/东方雅思资料.pdf"  
      我是不是只要将“c:/tomcat/webapps/english/”保持不变“/雅     思/雅思英语学习/东方雅思资料.pdf”的每个字符(包括空格之类的特殊符号)前加上%就可以?  
      如果是路径是“c:/tomcat/webapps/english/雅     思/雅思英语学习/pdf/东方雅思资料.pdf”  
      那“雅     思/雅思英语学习/pdf/东方雅思资料.pdf”中的那个“pdf”并不需要加上%?  
      不知道你有没有源程序给我们看看?  
       
      Top

    23 楼lymkelly(柳叶眉)回复于 2003-09-23 21:53:08 得分 0

    楼上的理解对吗???????????  
      大虾指教Top

    24 楼lymkelly(柳叶眉)回复于 2003-09-23 22:17:45 得分 0

    to:liad()   (:  
      我试验了   不行的  
      中文的不行  
      英文的可以Top

    25 楼lymkelly(柳叶眉)回复于 2003-09-23 22:38:07 得分 0

    英文的也不行!!!  
      总是空白的也面!!!!!!!1  
       
       
       
       
         
       
      我用的一个大虾的办法:  
      中文的不可以  
      英文的可以  
      大家看一下  
      java.io.FileNotFoundException:   http://127.0.0.1:8080/kyglxxxt/PROJECT/开发/2003/张立国/BPM_Tutorial.pdf  
       
      import   java.io.*;  
      import   java.net.*;  
      import   java.util.*;  
      import   javax.servlet.*;  
      import   javax.servlet.http.*;  
      public   class   testPDF   extends   HttpServlet{  
              public   void   init(ServletConfig   servletconfig)  
                      throws   ServletException  
              {  
                      super.init(servletconfig);  
       
       
              }  
       
      public   void   doPost(HttpServletRequest   req,  
      HttpServletResponse   res)  
      throws   ServletException,   IOException  
      {  
      ServletOutputStream   out   =res.getOutputStream   ();  
      res.setContentType(   "application/pdf"   );   //   MIME   type   for   pdf   doc  
      res.setHeader("Content-disposition","attachment;   filename="   +"BPM_Tutorial.pdf"   );  
      BufferedInputStream   bis   =   null;  
      BufferedOutputStream   bos   =   null;  
      try   {  
      URL   url   =   new   URL("http","127.0.0.1",8080,"/kyglxxxt/PROJECT/BPM_Tutorial.pdf");  
      bis   =   new   BufferedInputStream(url.openStream());  
      bos   =   new   BufferedOutputStream(out);  
      byte[]   buff   =   new   byte[2048];  
      int   bytesRead;  
      while(-1   !=   (bytesRead   =   bis.read(buff,   0,   buff.length)))  
      {  
      bos.write(buff,   0,   bytesRead);  
      }  
      }   catch(final   MalformedURLException   e)   {  
      System.out.println   (   "MalformedURLException."   );  
      throw   e;  
      }   catch(final   IOException   e)   {  
      System.out.println   (   "IOException."   );  
      throw   e;  
      }   finally   {  
      if   (bis   !=   null)  
      bis.close();  
      if   (bos   !=   null)  
      bos.close();  
      }  
      }  
      }  
       
      这样就显示正常,不过要谈出两个保存框(要是在jsp中直接使用超级连接,英文的直接就可以显示,没有保存况,所以说。。。。。。。这个方法也是没有用,写出来和那个中文的作个对比)  
      import   java.io.*;  
      import   java.net.*;  
      import   java.util.*;  
      import   javax.servlet.*;  
      import   javax.servlet.http.*;  
      public   class   testPDF   extends   HttpServlet{  
              public   void   init(ServletConfig   servletconfig)  
                      throws   ServletException  
              {  
                      super.init(servletconfig);  
       
       
              }  
       
      public   void   doPost(HttpServletRequest   req,  
      HttpServletResponse   res)  
      throws   ServletException,   IOException  
      {  
      ServletOutputStream   out   =res.getOutputStream   ();  
      res.setContentType(   "application/pdf"   );   //   MIME   type   for   pdf   doc  
      String   fileURL   ="http://127.0.0.1:8080/kyglxxxt/PROJECT/开发/2003/魏振钢/BPM_Tutorial.pdf";  
      res.setHeader("Content-disposition","attachment;   filename="   +"BPM_Tutorial.pdf"   );  
      BufferedInputStream   bis   =   null;  
      BufferedOutputStream   bos   =   null;  
      try   {  
      URL   url   =new   URL(fileURL);  
       
      bis   =   new   BufferedInputStream(url.openStream());  
      bos   =   new   BufferedOutputStream(out);  
      byte[]   buff   =   new   byte[2048];  
      int   bytesRead;  
      while(-1   !=   (bytesRead   =   bis.read(buff,   0,   buff.length)))  
      {  
      bos.write(buff,   0,   bytesRead);  
      }  
      }   catch(final   MalformedURLException   e)   {  
      System.out.println   (   "MalformedURLException."   );  
      throw   e;  
      }   catch(final   IOException   e)   {  
      System.out.println   (   "IOException."   );  
      throw   e;  
      }   finally   {  
      if   (bis   !=   null)  
      bis.close();  
      if   (bos   !=   null)  
      bos.close();  
      }  
      }  
      }  
       
      这样还是不行,错误是:java.io.FileNotFoundException:   http://127.0.0.1:8080/kyglxxxt/PROJECT/开发/2003/张立国/BPM_Tutorial.pdf"  
       
       
         
      Top

    26 楼liad()回复于 2003-09-23 22:39:38 得分 0

    in   =   new   BufferedInputStream(new   FileInputStream("E:/Tomcat4.1/webapps/test/测试/文档.pdf"));  
      web.xml  
      =======  
          <servlet>  
              <servlet-name>PdfServlet</servlet-name>  
              <display-name>Pdf   Servlet</display-name>  
              <servlet-class>pdf.DispPDF</servlet-class>  
          </servlet>  
       
          <servlet-mapping>  
              <servlet-name>PdfServlet</servlet-name>  
              <url-pattern>/servlet/PdfServlet</url-pattern>  
          </servlet-mapping>  
       
      然后用http://localhost:8080/test/servlet/PdfServlet  
       
      我的完全可以,要不我也不会贴出代码  
      Top

    27 楼lymkelly(柳叶眉)回复于 2003-09-23 22:40:48 得分 0

    哎呀!@  
       
      错了  
      这样  
       
       
       
         
       
      我用的一个大虾的办法:  
      中文的不可以  
      英文的可以  
      大家看一下  
      java.io.FileNotFoundException:   http://127.0.0.1:8080/kyglxxxt/PROJECT/开发/2003/张立国/BPM_Tutorial.pdf  
       
      import   java.io.*;  
      import   java.net.*;  
      import   java.util.*;  
      import   javax.servlet.*;  
      import   javax.servlet.http.*;  
      public   class   testPDF   extends   HttpServlet{  
              public   void   init(ServletConfig   servletconfig)  
                      throws   ServletException  
              {  
                      super.init(servletconfig);  
       
       
              }  
       
      public   void   doPost(HttpServletRequest   req,  
      HttpServletResponse   res)  
      throws   ServletException,   IOException  
      {  
      ServletOutputStream   out   =res.getOutputStream   ();  
      res.setContentType(   "application/pdf"   );   //   MIME   type   for   pdf   doc  
      res.setHeader("Content-disposition","attachment;   filename="   +"BPM_Tutorial.pdf"   );  
      BufferedInputStream   bis   =   null;  
      BufferedOutputStream   bos   =   null;  
      try   {  
      URL   url   =   new   URL("http","127.0.0.1",8080,"/kyglxxxt/PROJECT/BPM_Tutorial.pdf");  
      bis   =   new   BufferedInputStream(url.openStream());  
      bos   =   new   BufferedOutputStream(out);  
      byte[]   buff   =   new   byte[2048];  
      int   bytesRead;  
      while(-1   !=   (bytesRead   =   bis.read(buff,   0,   buff.length)))  
      {  
      bos.write(buff,   0,   bytesRead);  
      }  
      }   catch(final   MalformedURLException   e)   {  
      System.out.println   (   "MalformedURLException."   );  
      throw   e;  
      }   catch(final   IOException   e)   {  
      System.out.println   (   "IOException."   );  
      throw   e;  
      }   finally   {  
      if   (bis   !=   null)  
      bis.close();  
      if   (bos   !=   null)  
      bos.close();  
      }  
      }  
      }  
       
      这样就显示正常,不过要谈出两个保存框(要是在jsp中直接使用超级连接,英文的直接就可以显示,没有保存况,所以说。。。。。。。这个方法也是没有用,写出来和那个中文的作个对比)  
      import   java.io.*;  
      import   java.net.*;  
      import   java.util.*;  
      import   javax.servlet.*;  
      import   javax.servlet.http.*;  
      public   class   testPDF   extends   HttpServlet{  
              public   void   init(ServletConfig   servletconfig)  
                      throws   ServletException  
              {  
                      super.init(servletconfig);  
       
       
              }  
       
      public   void   doPost(HttpServletRequest   req,  
      HttpServletResponse   res)  
      throws   ServletException,   IOException  
      {  
      ServletOutputStream   out   =res.getOutputStream   ();  
      res.setContentType(   "application/pdf"   );   //   MIME   type   for   pdf   doc  
      String   fileURL   ="http://127.0.0.1:8080/kyglxxxt/PROJECT/开发/2003/张立国/BPM_Tutorial.pdf";  
      res.setHeader("Content-disposition","attachment;   filename="   +"BPM_Tutorial.pdf"   );  
      BufferedInputStream   bis   =   null;  
      BufferedOutputStream   bos   =   null;  
      try   {  
      URL   url   =new   URL(fileURL);  
       
      bis   =   new   BufferedInputStream(url.openStream());  
      bos   =   new   BufferedOutputStream(out);  
      byte[]   buff   =   new   byte[2048];  
      int   bytesRead;  
      while(-1   !=   (bytesRead   =   bis.read(buff,   0,   buff.length)))  
      {  
      bos.write(buff,   0,   bytesRead);  
      }  
      }   catch(final   MalformedURLException   e)   {  
      System.out.println   (   "MalformedURLException."   );  
      throw   e;  
      }   catch(final   IOException   e)   {  
      System.out.println   (   "IOException."   );  
      throw   e;  
      }   finally   {  
      if   (bis   !=   null)  
      bis.close();  
      if   (bos   !=   null)  
      bos.close();  
      }  
      }  
      }  
       
      这样还是不行,错误是:java.io.FileNotFoundException:   http://127.0.0.1:8080/kyglxxxt/PROJECT/开发/2003/张立国/BPM_Tutorial.pdf"  
       
       
         
      Top

    28 楼liad()回复于 2003-09-23 22:44:47 得分 0

    还有一种方法就是使用  
      web.xml  
      =======  
          <servlet-mapping>  
              <servlet-name>PdfServlet</servlet-name>  
              <url-pattern>*.pdf</url-pattern>  
          </servlet-mapping>  
      pdf文件都使用PdfServlet去处理,不过DispPDF.java有所改变  
      这样直接在http://localhost:8080/test/abc.pdf,但是这种方法我没有试验成功中文路径的,request.getServletPath()还搞不定,正在调试Top

    29 楼lymkelly(柳叶眉)回复于 2003-09-23 22:47:12 得分 0

    to  
      :liad()   (    
      我觉得如果你的验证成功化的  
      我的就是目录有了问题  
      你要执行这个servlet   的话,  
      按照你的那个部署web.xml的部署  
       
        我可能就是中文的目录方错了地方了  
      我试用一下  
      用你刚才的  
      那个绝对路径的  
      in  
       
       
      Top

    30 楼intelchen(intelchen)回复于 2003-09-23 22:54:21 得分 0

    楼主我对那个BPM_Tutorial.pdf敢兴趣  
       
      能不能把这个文件发到intelchen@163.net?  
       
      你们做BMP的东西吗?Top

    31 楼lymkelly(柳叶眉)回复于 2003-09-23 23:03:25 得分 0

    感谢liad()   (  
      成功了  
      用你说的   绝对路经的那一个  
      !!!!!!!!  
      非常感谢!!!!!!!!  
       
       
      我明天在看一看就揭帖,谢谢  
       
      终于冲破了黑暗了!1  
      完成以后要好好的   研究一下这个地方  
      非常感谢Top

    32 楼liad()回复于 2003-09-23 23:04:50 得分 0

    如果你的tomcat已经转化为windows服务时,你可以通过  
      E:\Tomcat4.1\logs\stderr.log  
      E:\Tomcat4.1\logs\stdout.log  
      看到出错信息和控制台输出信息Top

    33 楼lymkelly(柳叶眉)回复于 2003-09-24 08:37:32 得分 0

    logs\目录下面没有stderr.log  
      stdout.log这两个文件,  
      只有类似  
       
      localhost_admin_log.2003-09-23.txt  
      的文件  
       
        liad()   大虾说的那个用*的,有没有解决中文问题呢  
       
      我原来对流这一块一窍不通,现在有了开始,  
      好好研究一下  
      Top

    34 楼lymkelly(柳叶眉)回复于 2003-09-24 08:42:22 得分 0

    to:intelchen(intelchen)  
        我给你发了Top

    35 楼lymkelly(柳叶眉)回复于 2003-09-24 08:47:36 得分 0

    liad()   (   )   大虾  
       
      words时不时  
      也可以用这种方式打开呢  
      现在我的问题是  
       
      一个目录下面好多文档  
      不同的扩展名  
      不知道怎样才能统一起来Top

    36 楼liad()回复于 2003-09-24 13:34:35 得分 0

    utf8encode.jsp  
      ==============  
      <%@   page   contentType="text/html;   charset=UTF8"   pageEncoding="gb2312"   %>  
      <HTML>  
      <HEAD>  
      <TITLE></TITLE>  
      </HEAD>  
      <BODY>  
      <p>  
      <%=   java.net.URLEncoder.encode("测试",   "UTF8")   %>  
      <p>  
      <%=   java.net.URLEncoder.encode("文档",   "UTF8")   %>  
      </BODY>  
      </HTML>  
       
      html页面输出  
      %E6%B5%8B%E8%AF%95    
       
      %E6%96%87%E6%A1%A3    
       
      然后用http://localhost:8080/test/%E6%B5%8B%E8%AF%95/%E6%96%87%E6%A1%A3.pdf  
      就可直接访问E:\Tomcat4.1\webapps\test\测试\文档.pdf,而不需要什么servlet来处理  
       
      由于使用了  
      <%@   page   contentType="text/html;   charset=UTF8"   pageEncoding="gb2312"   %>  
      所以在google输入关键字“测试”并提交,URL变成了  
      http://www.google.com/search?hl=en&ie=UTF-8&oe=UTF-8&q=%E6%B5%8B%E8%AF%95&btnG=Google+Search  
       
      而在baidu里面没有将charset设为UTF8  
      所以在其上面提交关键字“测试”后,URL为  
      http://www1.baidu.com/baidu?cl=3&tn=baidu&f=4&ct=0&lm=0&word=%B2%E2%CA%D4  
      Top

    37 楼lymkelly(柳叶眉)回复于 2003-09-24 15:03:07 得分 0

    liad()   (大虾  
      又有了新的进展了阿!!  
      太好了  
      我去试一试Top

    38 楼lymkelly(柳叶眉)回复于 2003-09-24 15:33:00 得分 0

    liad()   (大虾  
      我崇拜的不行了  
      哎呀  
      真是太厉害了!!!!!!!!!  
       
       
      Top

    39 楼lymkelly(柳叶眉)回复于 2003-09-24 16:37:26 得分 0

    liad()   (大虾  
      基本上解决了问题  
      但是呢   如国我的文件名  
      中有空格,  
      就会有问题  

  • 相关阅读:
    cocos2dx-基本动画制作
    cocos2dx-CCScrollView的制作
    回调函数的作用
    cocos2dx-Action动作
    cocos2dx-cpptest的结构
    重载函数
    .h和.cpp的用法与区别
    NDK配置之体会
    Cocos2d-x 3.1 内存管理机制
    idea spring boot
  • 原文地址:https://www.cnblogs.com/cy163/p/1299218.html
Copyright © 2011-2022 走看看