精华内容
下载资源
问答
  • /* * LiuH * Descr:下载处理DownLoadFile.ashx * Addtime:2014/8/26 * LastModifyTime:2014/8/27 */ namespace ElementLibrary.Web.Action { /// <summary> ///DownLoadFile 的摘要描述 /// </summary> public ...

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO;

    using ElementLibrary.BLL; using ElementLibrary.MODEL; using System.Text; /*  * LiuH  * Descr:下载处理DownLoadFile.ashx  * Addtime:2014/8/26  * LastModifyTime:2014/8/27  */ namespace ElementLibrary.Web.Action {     /// <summary>     ///DownLoadFile 的摘要描述     /// </summary>     public class DownLoadFile : IHttpHandler     {         ElementDetailBLL elementDetailBLL = new ElementDetailBLL();         public void ProcessRequest(HttpContext context)         {             string strFunId = context.Request.QueryString["id"].ToString();//获取方法id(元件ID)             MODEL.ElementDetailInfo elementDetailInfo = elementDetailBLL.GetAllContent(strFunId);//客户端保存的文件名             string fileName = elementDetailInfo.FileName;             string strFilePath = elementDetailInfo.FilePath;             string filePath = context.Server.MapPath(strFilePath);//路径             FileInfo fileInfo = new FileInfo(filePath);             context.Response.Clear();             context.Response.ClearContent();             context.Response.ClearHeaders();            //解决文件名乱码(LiuH AddTime:2014/8/28)             if (context.Request.UserAgent.Contains("MSIE") || context.Request.UserAgent.Contains("msie"))             {                 // 如果客户端使用 Microsoft Internet Explorer,则需要编码                  fileName = ToHexString(fileName);             }             context.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);             context.Response.AddHeader("Content-Length", fileInfo.Length.ToString());             context.Response.AddHeader("Content-Transfer-Encoding", "binary");             context.Response.ContentType = "application/octet-stream";             context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");             context.Response.WriteFile(fileInfo.FullName);             context.Response.Flush();             //fileInfo.Delete();             context.Response.End();         }

            /// <summary>         /// 为字符串中的非英文字符编码         /// </summary>         /// <param name="s"></param>         /// <returns></returns>         public static string ToHexString(string s)         {             char[] chars = s.ToCharArray();             StringBuilder builder = new StringBuilder();             for (int index = 0; index < chars.Length; index++)             {                 bool needToEncode = NeedToEncode(chars[index]);                 if (needToEncode)                 {                     string encodedString = ToHexString(chars[index]);                     builder.Append(encodedString);                 }                 else                 {                     builder.Append(chars[index]);                 }             }

                return builder.ToString();         }

            /// <summary>         ///指定 一个字符是否应该被编码         /// </summary>         /// <param name="chr"></param>         /// <returns></returns>         private static bool NeedToEncode(char chr)         {             string reservedChars = "$-_.+!*'(),@=&";

                if (chr > 127)                 return true;             if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0)                 return false;

                return true;         }

            /// <summary>         /// 为非英文字符串编码         /// </summary>         /// <param name="chr"></param>         /// <returns></returns>         private static string ToHexString(char chr)         {             UTF8Encoding utf8 = new UTF8Encoding();             byte[] encodedBytes = utf8.GetBytes(chr.ToString());             StringBuilder builder = new StringBuilder();             for (int index = 0; index < encodedBytes.Length; index++)             {                 builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16));             }             return builder.ToString();         }

            public bool IsReusable         {             get             {                 return false;             }         }     } }

    转载于:https://www.cnblogs.com/lh123/p/3941316.html

    展开全文
  • Status2文件下载中文名称乱码处理

    千次阅读 2014-08-14 18:24:54
    Status2文件下载中文名称乱码处理

    Status2文件下载中文名称乱码处理:

    Status2.xml配置:

    <action name="<span style="font-family:FangSong_GB2312;">d</span>ownLoad" class="<span style="font-family:FangSong_GB2312;">xxx</span>.action.NewClass" method="downloadDocument">
    	<result name="success" type="stream">  <span style="font-family:FangSong_GB2312;font-size:18px;"></span><pre name="code" class="html">                <!--<span style="font-family:FangSong_GB2312;">设置</span>-->
                    <param name="contentType">application/octet-stream;charset=ISO8859-1</param>
    		<param name="inputName">inputStream</param>
    
    <!--动态获取文件名称-->
      <param name="contentDisposition">attachment;filename=${fileName}</param><param name="bufferSize">4096</param>
      </result>
    </action>
    
    说明:
    type默认为dispatcher。在处理文件下载的操作时,必须将type显式设置为stream类型
    stream主要向浏览器发送InputStream对象,通常用来处理下载文件,还可用于返回AJAX数据
    接下来就需要设置StreamResult类的三个重要的属性,如下所示
    contentType属性用来指定下载文件的类型,同样可以在Tomcat6.0.20//conf//web.xml文件中查看MIME Type Mappings
    contentDisposition属性用来设定显示的文件名,这是在点击下载链接时显示在提示框中的文件名
    同时它的值的filename=" "所设定的name值也是下载到本地之后的文件的名字
    并且它的写法是固定的filename=" ",这是由HTTP协议所规范的
    inputName属性的值需严格遵守JavaBean规范,它对应着Action中返回inputStream的方法名
    假设inputName设为downFile,则Action中必定有一个返回inputStream的getDownFile()方法
    另外contentDisposition属性可以设定两个值,它的第一个值用来设定文件打开方式,默认的是inline即在浏览器中打开
    也可设定attachment,如<param name="contentDisposition">attachment;filename="Struts2.ppt"</param>
    即无论是什么类型的文件,哪怕是TXT,它也会弹出一个下载框,供用户选择打开或下载


    Java代码:

    private String fileName;
    private String path;
    private InputStream inputStream;
    private String filePath;
    
    public InputStream getInputStream() throws Exception {
    	return new BufferedInputStream(new FileInputStream(filePath), BUFFERED_SIZE);
    }
    public String getFileName() throws UnsupportedEncodingException {
            System.out.println("ISO8859="+new String(fileName.getBytes(), "ISO8859-1"));
            System.out.println("GB2312="+new String(fileName.getBytes(), "GB2312"));
            System.out.println("UTF-8="+new String(fileName.getBytes(), "UTF-8"));
            System.out.println("fileName="+fileName);
            //fileName= java.net.URLEncoder.encode(fileName, "ISO8859-1");
            return new String(fileName.getBytes("utf-8"), "ISO8859-1"); //此处很重要
    }
    

    页面调用:
    <a href="javascript:;" οnclick="javascript:window.location='recruitDownLoad.action';">下载入会申请文档</a>	

     说明:电脑端浏览器简单配置就可以正常,此处主要是手机端文件名称乱码。

    展开全文
  • ①:struts1跟struts2文件上传基本的处理时差不多滴。就整个1的核心码囖。如下: html 页面 form里面一定要设置类型为: enctype="multipart/form-data" java类里面进行一个文件读写即可: inputStream = new ...

    今天上班先博一博,哈哈。。

    ①:struts1跟struts2文件上传基本的处理时差不多滴。就整个1的核心码囖。如下:

    html 页面 form里面一定要设置类型为:

     enctype="multipart/form-data"

    java类里面进行一个文件读写即可:

    inputStream = new DataInputStream(formFile.getInputStream());//文件流读取
    // 输出文件流
    outputLocalStream = new DataOutputStream(new FileOutputStream(
    		new File(filePath + "/" + fileName)));
    byte buffer[] = new byte[bufSize];//设置每次读取的文件流大小  一般默认设置:1024 ;当然了,也可以写其他的。
    while ((inputStream.read(buffer, 0, buffer.length) != -1)) {
    	outputLocalStream.write(buffer, 0, buffer.length);
    }

    ╭︿︿︿╮
    {/ o  o /} 
     ( (oo) )  
      ︶ ︶︶:一、在struts1里面文件的封装对象是formfile,不能使用file,struts2里面才能使用file。

                    二、文件读写操作完成记得关闭文件流。

    ②:struts1和2的文件download时候我们一般是将服务器或者数据库里面的文件取得然后给用户下载,河马如下:

    一、最简单的就是直接用超链接,如:<a href=“http://www.XXX.com/project/downloadFiles/fileOne” >fileOne</a>

    二、利用文件读写,然后把文件流抛出,利用浏览器自己的对流的封装下载文件。

    // ServletContext init
    				ServletContext context = request.getServletContext();
    				// 文件 MimeType的取得
    				response.setContentType(context.getMimeType(fileName));
    				// 文件取得
    				File file = new File(filePath + "/" + fileName);
    
    				if (file.exists()) {
    					// 文件名处理
    					fileDownName = java.net.URLEncoder.encode(fileDownName,
    							"UTF-8").replaceAll("\\+", "%20");
    					String temp = "attachment;filename=\"" + fileDownName
    							+ "\"";
    					//设置header
    					response.setHeader("Content-disposition", temp);
    					// 输出文件流
    					out = response.getOutputStream();
    					// 下载源文件读取
    					bis = new BufferedInputStream(new FileInputStream(file));
    					bos = new BufferedOutputStream(out);
    					byte[] buff = new byte[bufSize];
    					int bytesRead;
    					// writeFile
    					while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
    						bos.write(buff, 0, bytesRead);
    					}
    				}

    ╭︿︿︿╮
    {/ o  o /} 
     ( (oo) )  
      ︶ ︶︶:一、超链接的办法存在很大的风险,所以一般我们不采用这类方法处理。

                    二、文件读写操作完成记得关闭文件流。

     

     

     

     


     

    展开全文
  • web端下载文件,中文名称乱码处理

    千次阅读 2019-03-06 17:57:11
    java web下载文件时,对于文件名称(中文或者特殊字符)由于各个浏览器的差异,会造成乱码现象,此时可如下处理: 1、前端js: fileName = encodeURIComponent(fileName); var reg = new RegExp("’",“g...

    java web下载文件时,对于文件名称(中文或者特殊字符)由于各个浏览器的差异,会造成乱码现象,此时可如下处理:

    1、前端js:
    fileName = encodeURIComponent(fileName);
    var reg = new RegExp("’",“g”);//g,表示全部替换。
    fileName = fileName.replace(reg,"%27");

    2、后端java:
    String fileNameReal = “”;
    String user_agent = request.getHeader(“user-Agent”);
    if(StringUtils.isNotEmpty(fileName)){
    fileName = fileName .replace("&","&").replace("’","’");
    }
    if (StringUtils.isNotEmpty(user_agent) && user_agent.toLowerCase().contains(“msie”)) {
    //IE 浏览器
    fileNameReal = URLEncoder.encode(fileName, “UTF-8”);
    } else {
    // 非IE 内核浏览器
    fileNameReal = new String(fileName.getBytes(“UTF-8”), “ISO8859-1”);
    }
    response.setHeader(“Content-disposition”, “attachment; filename=”" +fileNameReal+""");

    展开全文
  • String fileName = "中文的文件名称.xlsx"; response.setContentType("application/octet-stream"); String s = dealFileName(request,fileName); response.setHeader("Content-Disposition", "attachment;filename...
  • 这是我在导出excel文件供用户下载时遇到的: 流程: 1、文件生成,文件全名名由路径加文件名构成,路径配置在数据库中动态读取,名称由时间加汉字构成。生成 的文件将存放在数据库中...中文乱码处理: 1、生成文件
  • // 打开文件  //ob_end_clean();  header("Content-type: application/octet-stream");  header("Accept-Ranges: bytes");  header("Accept-Length: ".filesize($on_disk));  if (preg_match("/MSIE/",$hua)) ...
  • 用户使用不同的浏览器下载文件的时候,在一些情况下会出现中文乱码的情况: 用户在国产操作系统使用低版本firefox,使用国产中间件进行文件下载时,会出现中文乱码,甚至有时候中文不显示的问题。 问题原因,有...
  •  * 下载文件 处理下载中心的数据包  *  * @author wangrr  */  protected void DownLoadFile(HttpServletResponse response ,HttpServletRequest request, String Path)  throws IOException  {  ...
  • JAVA文件下载中文乱码问题处理 项目开发前期没有注意浏览器兼容性问题,导致项目测试阶段出现了各种导出中文名称乱码问题。 并且在ie11中User-Agent变更成了Mozilla/5.0 (Windows NT 6.3,WOW64,Trident/7.0,rv:...
  • 有时候在谷歌和火狐浏览器下载下来的文件名称是好的,但是在ie或者别的浏览器中可能就是乱码的,这个就需要我们在前后进行一些处理。   前台: 在前台的时候,有时我们需要在url中传递一些中文参数,这时候直接...
  •  今天说一下下载文件的东西,因为整体的架构是:手机客户端+服务中间件+后端服务器,客户端和服务器端的通信是通过中间件路由的方式,对于附件的下载,也是手机客户端请求服务中间件,服务中间件再去请求后端服务器...
  • 在进行文件下载的时候出现中文名称乱码,显示不出来 response.setHeader(“Content-Disposition”, “filename=自定义的名称.jpg” ) 解决办法: 对中文名称进行编码处理: String fileName="自定义名称.jpg&...
  • 问题:当下载文件时,文件名称为中文时,如果没有对中文进行处理就会出现乱码的问题,如下图: 解决方案:对中文进行编码处理,代码如下: ////解决下载文件时文件名乱码问题 byte[] fileNameBytes = fileName....
  • Struts2的框架提供了现成的文件下载方式,大大...1.下载文件的文件名怎么搞?不搞的话浏览器默认名字是提交的action的名字,显然不好 2.文件名里面想搞中文,但是实际上下载文件名出现了乱码或不显示中文怎么搞?...
  • 用以下这句代码处理一下文件名称即可: HttpUtility.UrlEncode(name, System.Text.Encoding.UTF8)
  • * 获得下载文件的资源名称 * * @param fileName * @return */ public static String getResourceDOwnFileName(String fileName) throws UnsupportedEncodingException { StringBuffer out = new StringBuffer...
  • 对于经常碰到下载文件时,如果文件名称包含特殊符号,如 $-_.+!*'(),@=&amp;, 如果不单独处理,则会出现乱码。 因此对于解决乱码的问题, 直接贴出代码: #region 特殊符号乱码处理 public static string ...
  • 文件下载过程中,会出现中文名乱码或者文档名称中含有空格的,需要处理下,否则要么乱码,要么空格变成了“+”号,有点头疼。 临时想到一种办法: 即: //定义输出文件编码及类型和文件名 /** * 查看附件...
  • 发送请求通过form表单的形式,文件名称及文件类型存储在hidden类型的input标签里,“下载文档”超链接也包含在form表单之中,点击超链接在downFile方法中提交表单请求。 代码:   &lt;form id="${guide...
  • 保存文件时我们常使用请求返回数据中包含的文件名称文件名称常包含中文导致文件下载失败,乱码、或者未空文件 这时我们需要在beanshell中不直接使用文件名称变量 通过将变量传递给Beanshell,然后再使用,可解决...
  • 最近做了一个文件下载的需求,但是下载文件名称如果是中文名,下载后出现名称无法显示的问题。查看资料后最终解决了。 原因: 因为用post方式提交的,所以用Servlet做的,设置的头信息里面需要对文件名称处理...
  • String name = "线下考勤模板.xls"; String agent = request.getHeader("USER-AGENT").... //根据浏览器类型处理文件名称 if(agent.indexOf("msie")>-1 || agent.indexOf("edge")>-1){ name = URLEnco
  • 下载,自定义临时文件目录名称,然后再打开就可以了。 wx.downloadFile({ url: 'https://xxx.cn/sfxy.docx', //仅为示例,并非真实的资源 filePath: wx.env.USER_DATA_PATH + '/这是自定义标题.docx', ...
  • String userAgent = request.getHeader("User-Agent").toLowerCase(); if(userAgent.contains("safari") && !userAgent.contains("chrome")){ //处理safari的乱码问题 ...
  • **问题描述:**在爬取数据的时候需要生成.csv文件用于存储数据,但是生成的文件打开的时候是都是乱码...3、选择文件,另存为,编辑文件名称(通常不需要改动,因为可以直接覆盖),右下角的编码部分选择ANSI,一定注
  • 1.首先建议在自定义的一个盘里面新建一个文件夹(以自己想要安装虚拟机的名称新建),这样可以避免以后安装多台虚拟机导致文件混乱。如图: 2.打开VMware。 选择创建新的虚拟机,选择自定义。 ...
  • String userAgent = request.getHeader("User-Agent").toLowerCase();if(userAgent.contains("safari") &...userAgent.contains("chrome")){//处理safari的乱码问题byte[] bytesName = fileName.getBytes("UTF-8");...
  • 相比之前的http文件服务器,此版本支持多线程处理响应请求,支持多请求同时下载功能,中文文件名会乱码,仅支持英文文件名称

空空如也

空空如也

1 2 3 4 5 6
收藏数 102
精华内容 40
关键字:

下载文件名称乱码处理