彻底解决中文名文件下载和下载文件内容乱码问题

解决|问题|下载|中文

之前,写过一个Download.jsp文件,可以解决下载文件乱码问题(诸如:DOC,XSL文件等等).
后来发现,遇到中文名的文件的时候,文件下载将会报错~~~~
今天,通过改写原Download.jsp文件已经彻底解决了这个问题~
现在,把一整套的文件上传下载的方法给贴出来~~~以便大家借鉴!~!~!~!~! 
作者:古埃及法老
-------------------------------------------------------------------------------------------------------------------
测试环境:WEBLOGIC 8.1,WIN XP SP4,IE 6.0
-----------------------------------------------------
文件上传:
-----------------------------------------
准备工作:导入著名的SmartUpload.jar组件包
upload.jsp文件
---------------------------------------------------------
<%@ page contentType="text/html; charset=gb2312" %>
<%
 request.setCharacterEncoding("gb2312"); // 这句话很重要,否则遇到中文就出错~
%>
<HTML><HEAD><TITLE>上传</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
</HEAD>
<BODY leftMargin=0 topMargin=0>
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#DEE7EF">
  <tr>
    <td align="center">
      <FORM action="upload_ok.jsp" method=post name="Upload" enctype="multipart/form-data">
        <br>
        请输入附件文件的所在路径<FONT color=red> * </FONT>为必填项目<br>
        <br>
        <TABLE width="317" border=0 cellPadding=0>
          <TBODY>
            <TR>
              <TD align=right vAlign=center nowrap>附件路径:</TD>
              <TD><input type="file" name="file" style="border: 1px #FFFFFF solid;background:#efefef" > <FONT color=red>*</FONT></TD>
            </TR>
            <TR align="center">
              <TD height=60 colspan="2" vAlign=center nowrap> <INPUT style="height:22px" name=B1 type=submit value=" 确 定 " >
<INPUT style="height:22px" name=B2 type=reset value=" 取 消 " >
              </TD>
            </TR>
          </TBODY>
        </TABLE>
      </FORM>
</td>
  </tr>
</table>
</BODY></HTML>
---------------------------------------------------------
upload_ok.jsp文件
---------------------------------------------------------
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="com.jspsmart.upload.*" %>
<HTML><HEAD><TITLE>上传成功!</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
</HEAD>
<BODY leftMargin=0 topMargin=0>
<jsp:useBean id="mySmartUpload" scope="page" class="com.jspsmart.upload.SmartUpload" />
<table width="80%"  border="0" cellpadding="0" cellspacing="0" bgcolor="#DEE7EF">
  <tr>
    <td align="center">
<% 
 int count=0;
 String fileName = null;
 mySmartUpload.initialize(pageContext); 
 mySmartUpload.upload();
 com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);
 if (!myFile.isMissing()) {
  //String ext=myFile.getFileExt();//得到后缀   
  fileName = myFile.getFileName();
            myFile.saveAs("/files/" + fileName);//你要存放文件所在文件夹的相对路径
     out.println("文件:<b>"+fileName+"</b>上传成功!<br>文件大小:" + myFile.getSize() + "kb<BR>");
     }
%>
</BODY></HTML>
---------------------------------------------------------

文件下载:
-----------------------------------------
文件的超连接写法范例:
<% String fname ="中文测试.xsl"; //假设你的文件名是:中文测试.xsl
%>
<A target="_blank" href="Download.jsp?filename=<%=fname%>">下 载</A>
文件的超连接写法范例-2 重新用utf-8对文件名编码:
<%@ page contentType="text/html;charset=gb2312" session="true"%>
<%  String name=java.net.URLEncoder.encode("世界文化.doc","UTF-8"));%>  <a href="c:\<%=name%>">世界文化.doc</a>

Download.jsp文件
---------------------------------------------------------
<%
  java.io.BufferedInputStream bis=null;
  java.io.BufferedOutputStream  bos=null;
try{
 String filename=request.getParameter("filename");
             filename=new String(filename.getBytes("iso8859-1"),"gb2312");
 response.setContentType("application/x-msdownload");
 response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
 bis =new java.io.BufferedInputStream(new java.io.FileInputStream(config.getServletContext().getRealPath("files/" + filename)));
 bos=new java.io.BufferedOutputStream(response.getOutputStream()); 
 byte[] buff = new byte[2048];
 int bytesRead;
 while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
  bos.write(buff,0,bytesRead);
 }
}
catch(Exception e){
 e.printStackTrace();
}
finally {
 if (bis != null)bis.close();
 if (bos != null)bos.close();
}
%> 

时间: 2024-08-03 02:03:37

彻底解决中文名文件下载和下载文件内容乱码问题的相关文章

php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)_php实例

在做PHP程序时,需要使用PHP做的文件下载 那做就做呗把代码复制过来改了一改. 很多效果也出来了 那么点击下载后,恩,本以为搞定了文件下载,谁知道,图片打开的时候提示文件损坏,这我就观察了文件的大小.似乎真是多了 1KB左右. 使用PS打开,恩,提示了损坏,不过图象可以出来. 那么我就认为是 那多出来的 1kb的问题了. 然后,我把一个txt上传上去,然后下载. 果然发现,文件的前面以及后面,都多了几个 字符. 那我就在想应该怎么去掉啊.各种百度,谷歌,上论坛提问. 最后,经过我一个多小时的搜

完美解决phpexcel导出到xls文件出现乱码的问题_php技巧

解决方法如下所示: <?php include 'global.php'; $ids = $_GET['ids']; $sql = "select * from crm_cost_end where id in ( {$ids} )"; $result = $db->findAll($sql); //echo $result[1]['sn']; //创建一个excel对象 $objPHPExcel = new PHPExcel(); // Set properties $o

ftpclient-apache FTPClient 上传文件,文件内容乱码

问题描述 apache FTPClient 上传文件,文件内容乱码 代码如下: InputStream is = new ByteArrayInputStream(xmlString.getBytes("utf-8")); FtpApache.upload(ip, port, userName, password, path, fileName, is, business.getFtpCharset()); 解决方案 it's ok,suitable

文件下载-android下载文件打不开

问题描述 android下载文件打不开 我用mars老师的源码, /** * 该函数返回整形 -1:代表下载文件出错 0:代表下载文件成功 1:代表文件已经存在 */ public int downFile(String urlStr, String path, String fileName) { InputStream inputStream = null; try { FileUtils fileUtils = new FileUtils(); if (fileUtils.isFileEx

HttpWebRequest下载文件,乱码问题解决方案

写在前面 今天之所以会总结HttpWebRequest下载文件,主要是因为在使用该类下载文件的时候,有些地方需要注意一下,在实际的项目中遇到过这种问题,觉得还是有必要总结一下的.在下载文件时,最常见的就是下载的文件出现乱码. 一个例子 还是以前面介绍的restful接口为例吧,现在我要通过HttpWebRequest请求,来下载图片,可以这样来. api地址为:http://localhost:21074/ImageService/api/1.jpg 关于restful imageservice

weblogic10.3导出Excel文件内容乱码,求解

问题描述 weblogic10.3导出Excel文件能够正常下载,但内容是乱码的,通过远程登录到服务器上,进入到自建域的war项目运行目录下,打开创建的临时Excel文件,确是正常的内容不乱码,一切显示正常,并且在Tomcat下一切正常(包括下载之后也能正常显示).经过分析有可能是weblogic在输出字节流时,对流进行了管理,也就是说有可能经过了转码,或者控制输出流未输出完正,导制前端下载后因字符格式问题,显示不正常(Excel提示:您尝试打开的文件'test.xls'的格式与文件扩展名指定的

解决PHP提交MYSQL数据库中文内容乱码方法

无论是ASP还是PHP程序语言,甚至有其他WEB语言,基础的应用无非就是数据库添加.读取.编辑.删除等需求,再复杂的功能项目都围绕这些进行的.在录入MYSQL数据库的时候提交的中文数据出现乱码问题,这个问题对于新手学习PHP肯定是有遇到过的.   其实问题还是比较简单的,肯定是编码不对应导致的.比如页面的编码,数据库字段的编码,以及数据库链接编码问题,这里老蒋全部采用UTF-8编码,那需要寻找这几个地方的问题,就解决乱码问题.   第一.页面编码问题   我们在WEB页面中,需要全部保持是UTF

解决sublime text3 gb2312编码文件显示乱码问题

问题描述: sublime text3 装了gb2312编码转换成utf8显示的ConvertToUTF8插件, 保存文件时会出现乱码,关掉文件,再打开该文件,ConvertToUTF8根本就没起作用,就一直显示乱码,文件重命名后再打开,ConvertToUTF8却能正常转换编码. 关键是:文件重命名后再打开,ConvertToUTF8却能正常转换编码. 可断定是ConvertToUTF8 转码缓存有问题,解决方法: 删除sublime 安装目录下,PackagesUser目录里面的encodi

JavaWeb利用struts实现文件下载时改变文件名称_java

先看看效果图: package com.fenghuo.struts.download; import java.net.URLEncoder; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.