0 0

中文名称的图片在IE系列浏览器中另存为文件名被截取15

只在IE浏览器出现,且只是右键另存为才有问题。左键直接下载,CTRL+C,CTRL+V。甚至在IE缓存文件夹中都是正确的。

JSP

  <td align="center" valign="middle" >
                <a href="<%=abspath%><s:property value='attachPath(filepath,filename,realfilename)'/>" target="_blank" title="<s:property value='realfilename'/>">
				 <img src="<%=abspath%><s:property value='attachPath(filepath,"/s_"+filename,realfilename)'/>" width="30" height="30" border="0" /> </a></td>

 attachPath

	public String attachPath(String filepath,String filename,String realname){
		String url ="fileupload!newAttachDownload.action?tid=";
		//boolean isFileRead = false;
		if(filepath!=null && !filepath.equals("")&& filename!=null && !filename.equals("")){
			String html = getSessionUser().getId() +","+ filepath + "," + filename+","+realname;
			 return url+fish.encryptString(html);
		}else{
			return "";
		}	
	}

 newAttachDownload

public String newAttachDownload(){
		if(tid!=null&&!"".equals(tid)){
			String html = fish.decryptString(tid);
			if(html == null){return "document_error";}
			String [] arr = html.split(",");
			if(arr!=null && arr.length >= 3){
				if(!arr[0].equals(getSessionUser().getId().toString())){return "document_error";}
				if(arr.length==4){
					fileName = arr[3];
				} else if(arr.length==3){
					fileName = arr[2];
				} else if(arr.length>=5) {
					fileName = "";
					for(int i=3; i<arr.length; i++) {
						fileName += arr[i];
						if(i+1 < arr.length) {
							fileName += ",";
						}
					}
				}
				if (null != fileName && (!"".equals(fileName))) {
					try {
						//Chinese code into UTF-8
						//fileName = new String(fileName.getBytes("GBK"), "ISO-8859-1");
						String agent =  ServletActionContext.getRequest().getHeader("USER-AGENT");
				        if (null != agent){   
				            if (-1 != agent.indexOf("Firefox")) {//Firefox   
				            	fileName = "=?UTF-8?B?" + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(fileName.getBytes("UTF-8"))))+ "?=";
				            }else if (-1 != agent.indexOf("Chrome")) {//Chrome   
				            	fileName = new String(fileName.getBytes(), "ISO8859-1");
				            } else {//IE7+   
				            	fileName = java.net.URLEncoder.encode(fileName, "UTF-8"); 
				            	fileName = fileName.replaceAll("\\+", "%20");
				            	fileName = fileName.replaceAll(java.net.URLEncoder.encode(":"), ":");
				            	fileName = fileName.replaceAll(java.net.URLEncoder.encode("/"), "/");
				            	ServletActionContext.getResponse().setHeader( "Content-Disposition", "attachment;filename="  + fileName);
				            }   
				        }
					} catch (UnsupportedEncodingException e) {
						this.addActionMessage("String turn yards errors.Chinese code");
//						e.printStackTrace();
						log.error("Bad encoding on "+fileName, e);
						return "document_error";
					} 
				}
				
//				File input = new File(WEB_PATH+""+arr[1]+"/"+arr[2]);
				File input = new File(FILE_UPLOAD_PATH+""+arr[1]+"/"+arr[2]);
				System.out.println(input);
				if(input.canRead()){
					try {
						fileStream = new FileInputStream(input);
					} catch (FileNotFoundException e) {
						e.printStackTrace();
					}
					return "file_download";
				}else{
					this.addActionMessage("Download the file failed, the file has been deleted or does not exist!");
					return "document_error";
				}
			}else{
				return "document_error";
			}
		}else{
			return "document_error";
		}
	}

 

            <result name="file_download" type="stream">
				<param name="inputName">fileStream</param>
				<param name="contentType">
				    ${contentType}
				</param>
				<param name="contentDisposition">
					attachment;filename="${fileName}"
				</param>
				<param name="bufferSize">2048</param>
			</result>

 


问题补充:之前,关于图片的文件名都是英文+数字。最近增强了这部分,就是UPLOAD的时候的文件名,Download的时候也要是原本的文件名。所以就涉及了中文的问题。目前乱码问题没有了。可是在IE另存为的时候却一直有问题。
2013年5月24日 11:20
  • 大小: 44.6 KB

1个答案 按时间排序 按投票排序

0 0

这个有跟你一样的问题
http://eddysheng.iteye.com/blog/50414

2013年5月24日 11:34

相关推荐

    javaScript实现另存为功能

    在浏览器环境中,JavaScript可以极大地提升用户体验,包括模拟浏览器的一些原生功能,如“另存为”(Save As)功能。这个功能允许用户保存网页上的资源到本地计算机,例如HTML、图片、CSS或JavaScript文件。 在...

    selenium右击另存为图片

    在IT行业中,自动化测试和网页操作经常需要用到Python的Selenium库。Selenium是一个强大的Web应用程序接口(API),它允许我们模拟用户与浏览器的交互,包括点击、输入、滚动、导航等,非常适合进行功能自动化测试和...

    解决浏览器请求响应中文文件名乱码问题的小工具包,解决中文文件名问题

    在IT行业中,尤其是在Web开发领域,处理中文文件名在浏览器请求响应中出现乱码的问题是一项常见的挑战。这个小工具包的出现,旨在提供一个解决方案,帮助开发者顺利地处理包含中文字符的文件名,确保在传输过程中...

    不同浏览器上中文文件名的下载乱码问题

    不同浏览器上中文文件名的下载乱码问题 浏览器IEChromeSafariOpera 浏览器能正确识别的编码格式

    IE9浏览器64bit

    这个文件名的含义是:IE9为产品名称,Windows7表示适用于Windows 7操作系统,x64代表64位版本,chs代表中文语言,最后的数字“1409560574”可能是该文件的特定版本号或生成时间戳。 在下载和安装64位IE9时,用户...

    js base64编码格式图片另存为下载

    这个URL可以在浏览器中直接打开显示图片,也可以用于下载。 ```javascript let url = URL.createObjectURL(blob); ``` 3. **创建下载链接**:使用HTML5的`&lt;a&gt;`标签,设置其`href`属性为上一步生成的URL,并添加`...

    图片文件图像中写上文件名

    标题"图片文件图像中写上文件名"和描述"将图片文件的文件名写在图像上,用于图片编号"指的是一个功能,它允许用户在图片内容上添加文字水印,显示图片的文件名,从而实现图片的可视化编号。这个过程通常涉及到图像...

    coreldraw9在win10下,另存为时,无法显示另存为文件名称及文件类型

    把drawintl.dll复制到Corledraw执行文件目录下替换原来文件及可

    Java实现文件下载并解决中文文件名乱码

    然而,在实际操作过程中可能会遇到一个常见问题:当文件名包含中文字符时,下载后的文件名可能出现乱码的情况。本文将详细介绍如何使用Java实现文件下载功能,并重点讲解如何解决中文文件名乱码的问题。 #### 一、...

    完美解决CorelDraw9保存、另存、输出时不显示文件名称和文件类型

    CorelDraw9制图工具是系列中最稳定最好用的版本,所以很多设计师都一直没换版本,但在win10系统中保存、另存、输出时,文件浏览框会遮盖其他选项。输出对话框中不显示文件名称和文件类型栏目,导致这么好用的版本也...

    截取文件的文件名

    截取文件的文件名 学习这里通过StringBuffer和System.in的read()方法获取文件名!!!

    windows系统 32位 IE7浏览器

    文件名 "IE7-WindowsXP-x86-chs.exe" 表明这是一款针对Windows XP操作系统的IE7安装程序,x86表示它是32位版本,chs代表“Chinese Simplified”(简体中文),意味着这个版本是为中国用户设计的,界面和文档都是中文...

    ASP.NET、SharePoint中另存文件的长文件名被截断的原因及解决办法

    这主要表现在文件名如果超过一定长度,在通过浏览器的【右键】-【另存为】功能下载时,文件名会被截断,只剩下前15个汉字或字符。这种情况不仅在SharePoint环境中出现,在***应用中也普遍存在。以下是关于这一现象的...

    IE.rar_IE_ie 浏览器_vb 浏览器_多 浏览器_浏览器

    标题中的"IE.rar_IE_ie 浏览器_vb 浏览器_多 浏览器_浏览器"表明这是一个关于基于VB(Visual Basic)编写的Internet Explorer(IE)浏览器的项目,其中可能包含了多个浏览器页面的功能。这个项目可能是为了学习、...

    python处理pandas读取文件名有中文报错问题解决方法

    在使用Python的Pandas库处理数据时,我们常常会遇到读取文件名中包含中文字符导致的编码错误问题。这一现象主要发生在操作系统对于文件路径或文件名的编码不支持中文的情况下。尤其是当环境是Windows系统或者某些...

    uEditor上传图片并保存为原文件名

    【标题】"uEditor上传图片并保存为原文件名"涉及的是在ASP.NET环境中使用uEditor编辑器进行图片上传,并确保图片文件以上传时的原始文件名存储的过程。uEditor是一个流行的富文本编辑器,广泛应用于网站内容管理系统...

    javaScrip里面怎么调用保存和另存为对话框

    在探讨如何在JavaScript中触发保存或另存为对话框的问题时,我们首先需要理解,由于浏览器的安全限制,直接从客户端脚本(如JavaScript)中触发一个保存或另存为的对话框是受到严格限制的。然而,有几种方法可以绕过...

    java浏览器调用ie内核

    压缩包中的文件名"java浏览器调用ie内核-1、java浏览器调用ie内核-简单"可能代表了实现此功能的不同版本或步骤。"1"可能是基础实现,而"简单"可能是简化后的版本。这些文件可能包含Java源代码、配置文件或者相关的...

    QT中QFileDialog文件读写另存为操作

    在这个场景中,我们主要讨论如何利用QFileDialog实现文件的读取、编辑以及保存和另存为的操作。 首先,我们需要包含必要的头文件,`#include &lt;QFileDialog&gt;`,以便使用QFileDialog类。然后,我们可以创建一个...

    彻底解决Asp.net 文件下载时文件名的中文乱码和空格异常全球性技术难题

    在IE中,空格会被编码为`+`,而在其他一些浏览器中,如Opera,空格可能需要编码为`%20`才能正确解析。因此,需要根据浏览器类型来选择合适的编码方式。 2. **中文字符编码**:对于非ASCII字符,如中文字符,使用`...

Global site tag (gtag.js) - Google Analytics