下载文件中中文链接的解决

在一个链接中如果链接的是中文名字的链接,一般会报404错误,可以使用流的方式下载,即可以解决。

这是一个简单的页面,下载的文件包含中文名:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>下载测试</title>
  </head>
  
  <body>
    <a href="loadFile?filename=迷失lost迷失2.doc">下载迷失文档</a>
  </body>
</html>

 通过web.xml配置文件可以找到处理类:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<servlet>
		<servlet-name>LoadFileServlet</servlet-name>
		<servlet-class>july.DownLoadFile</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>LoadFileServlet</servlet-name>
		<url-pattern>/loadFile</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

 处理类,把文件以流的方式送往客户端:

package july;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class DownLoadFile extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
           throws IOException, ServletException {
       OutputStream out = response.getOutputStream();
       byte b[] = new byte[1024];
       String filename = request.getParameter("filename");
       filename = new String(filename.getBytes("ISO8859_1"),"utf-8");
       System.out.println("filename"+filename);
       File fileLoad = new File("F:/LostMusics/Season5", "迷失lost.doc");
       response.setHeader("Content-disposition", "attachment;filename="
              + new String(filename.getBytes("GBK"),"ISO8859_1"));
       response.setContentType("application/x-tar");
       long fileLength = fileLoad.length();
       String length = String.valueOf(fileLength);
       response.setHeader("Content_Length", length);
       FileInputStream in = new FileInputStream(fileLoad);
       int n = 0;
       while ((n = in.read(b)) != -1) {
           out.write(b, 0, n);
       }
    }
}

 这样下来,就可以下载有中文标题的链接了。

这里只是一个简单的例子,在实际中,取文件的方式和处理过程都不是这样。

新增方法:

导入包:JspSmartUpload.jar

建立一个jsp或者servlet作为下载通用页面,为简单其间,直接写在jsp页面中,如:

<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="com.jspsmart.upload.*" %>
<%
  String fileName =request.getParameter("fileName");//从连接中传过来
  String fullfile = "files/"+fileName; //得到文件全路径
  
  // 新建一个SmartUpload对象
  SmartUpload su = new SmartUpload();

  // 初始化
  su.initialize(pageContext);

  // 设定contentDisposition为null以禁止浏览器自动打开文件,保证点击链接后是下载文件。
  // 若不设定,则下载的文件扩展名为doc时,浏览器将自动用word打开它。
  su.setContentDisposition(null);

  // 下载文件
  su.downloadFile(fullfile, null, new String(fileName.getBytes("gb2312"), "ISO8859-1"));
  out.clear();
%>

 在另一个页面中调用下载页面,如:

 <input  type="button" onclick="javascript:document.location = 'download.jsp?fileName='wwwbepatientcom.jsp''" value="download"/>
 

你可能感兴趣的:(java,Web,jsp,javaee,servlet)