luckdd's profile冬儿的北京生活PhotosBlogListsMore Tools Help

luckdd

Occupation
Location
No list items have been added yet.
Photo 1 of 2

冬儿的北京生活

10/29/2008

我要抗争

最近不知是不是所谓的"点背". 老婆丢手机,意外怀孕;我开车出的小事故,这一连串的背工让我损失了三四千.在现在这样的困难时期无论在物质上还是精神上对我来说都是一个沉重的打击.
 老婆说我们最近不顺,我劝她别瞎想. 没什么顺不顺的,无非是事情机缘巧合赶到一起;加上自己的联想,便会想到是所谓的不顺.
 我这个人偏偏不信命运的安排.已经发生的事会让我小心谨慎;新的挑战我也毫不畏惧.兵来将挡,水来土掩. "自信打不死的心态活到老!" 暴风雨来的再猛烈些吧!
7/18/2008

抓周准备

抓周的东东1.英汉字典:代表文学家或律法。2.毛笔:具有制定意味,代表书法家、艺术家、文人、文职工作。3.尺子:具有尺度的意味,代表制定法律者、规范制度者、革命家。4.计算器:代表商家或生意人。5.百元人民币和百元美钞各一张:代表富有之意,日后可成为银行家、善于储蓄的富翁或有钱人。6.印章:代表官位或官权。7.彩色笔:代表艺术家。8.碎布头:代表服装设计师。9.羽毛球:代表运动员。10.录音带:代表音乐家。11.筷子:代表厨师、饭店业者。12.小鞋子:代表旅行家、探险家。13.面霜:美容业14.一瓶药/听诊器:代表医生16.鼠标:代表IT业17.碟子:美食家
6/26/2008

[转]EMC Documentum 应用案例

 

  • 汉莎航空技术公司利用EMC Documentum提升客户服务

  不同行业内企业的信息化建设不断深入,内部网建立更加完善,ERP、CRM、SCM及BPR等信息系统在规划实施中。然而,这些应用系统的建立使得部门与部门之间、企业与客户、供应商之间产生大量的信息交换与传递,包括扫描文档图像、照片、语音和视频等在内的非结构化数据日益增多。如何有效的维护、更新、检索及管理各种内容,如何在海量的信息中快捷的获取有效信息成为企业当前面临的新问题,因此,内容管理正在成为企业信息化的新重点。
  企业内容管理基本包括企业文档和图像管理;Web 内容管理;数字资产管理;业务过程管理;记录管理;协作;公司治理和法规遵从性。EMC Documentum是全球领先的内容管理平台,通过优化工作过程和利用信息资产提高生产效率、降低成本、减少风险,并确保遵守管理法规,帮助企业将部门、内容和相关业务流程统一在一起,其集成式内容、法规遵从和协作解决方案支持人们的各种工作过程,从最初的讨论和计划,到设计、生产、营销、销售、服务和公司管理。全球范围内的金融、电信、政府等行业的客户正在通过EMC Documentum简化其复杂的IT基础结构,改善总体拥有成本,提高工作效率和客户服务级别。以汉莎航空技术公司(Lufthansa Technik)为例。
  原有Web服务遇到问题
  汉莎航空技术公司是世界上最大的航空技术支持服务提供商,不仅为飞机提供维护和检查,还负责维护发动机,电子设备等,其客户包括370多家航空公司和运营商。汉莎航空技术有超过23000名的员工,分布在246家子公司和分公司中,负责使飞机时刻保持技术正常状态。早在2001年,Lufthansa AG的CEO与高层管理人员要求汉莎航空集团的所有公司都制定电子商务战略,以便通过互联网增加业务量。汉莎航空技术将“通过网络提供更好的客户服务”作为战略制定过程中重要的部分。
  汉莎航空技术就已经认识到,通过Web向客户提供信息的重要性,并且投入资金为客户创建了约30种不同的应用。每个部门都建立了自己的定制Web应用,便于客户执行基本功能。例如在这些站点上查看订单状态和技术文件等。然而,这些站点属于静态方式,无法在不同的站点上实现一致性。虽然设立了面向所有用户的统一入口,但登录和授权仍在独立服务器上进行,而且服务器与各种自开发应用之间的交互很不稳定,用户无法保证在需要的时候一定能够访问到所需信息,系统支持成本也很高。因此,汉莎航空技术需要以更加有效的方式提供新的Web应用内容。并且,要想在客户 Web站点上发布或更新内容,不仅昂贵,而且很难完成。
  新门户有效改善客户服务
  如何以更有效的方式提供新的Web内容?汉莎航空技术认为,改善客户服务的最佳途径是为客户提供动态的个性化门户,不仅要为客户提供更加新鲜的Web内容,还需要提高内容供应的效率。因此,汉莎航空技术选择EMC Documentum与BEA结合在一起,提供切实可行的内容管理平台,并且提供企业级门户基础设施。汉莎航空技术的IT项目经理Frank Luka表示,“我们选择EMC Documentum的理由是,它不但能够提供WCM功能,还能提供丰富的内容管理功能,并通过与BEA WebLogic平台的无疑集成,为我们奠定了可靠、可扩展、可延伸的基础。使得客户只需敲击键盘,就可以随时获得所需的实时信息,能够为客户提供很高的价值。”
  汉莎航空技术使用Documentum Portlets for BEA WebLogic Portal----以Java服务器页面、Java等级和XML文件形式提供的预打包Documentum内容管理功能,快速、经济有效地在BEA WebLogic内无疑提供动态内容管理服务,使合法门户的用户能够安全、可靠地创建、查找、审核和修改内容。另外,利用EMC Documentum和BEA WebLogic Portal共享的通用安全性和元数据模型,门户还可以在用户登录时识别用户的身份和职位。
  无论何时,身处何处,汉莎航空技术客户公司的质量经理、采购员和行政管理人员,都可以使用门户快速、容易地访问重要信息,例如,通过门户,客户不但可以查看飞机的配置及维护计划,检查维修程序的状态,确定哪个工程变更程序已经完成,还可以查看各种组件的可靠性报告。此外,对于正在开展的项目,客户还可以添加评语或修改某个部分。需要某种材料或组件时,客户可以直接提交请求,无需再发送电子邮件传真,或打电话。
  提高企业效率和ROI
  受益的不仅是客户,汉莎航空技术世界各地为飞机提供维护和维修服务的员工,直接可以从门户任务卡中访问到完成维护或维修任务所需要的所有基本信息。例如,马耳他子公司的技术人员可以利用门户完成Airbus A320飞机的维护任务。另外,Lufthansa的工程师和其他人还利用门户快速、方便地访问其它信息,例如服务公告,工程程序或飞机配置信息等。
  现在的汉莎航空技术的内容拥有者能够自己发布内容,不需要外部Web代理机构或内部IT人员的辅助,因而大大加快了Web发布时间,降低了成本。例如,媒体与公共关系部门可以发布与公司相关的新闻、财务数据及其它信息;销售和营销部可以发布与销售地区、销售活动和合同有关的信息;每个部门都可以宣传自己的服务。汉莎航空技术预测,在未来五年中,Documentum-BEA WebLogic Portal将实现大约12%的投资回报(ROI)。
  除了管理门户内容外,汉莎航空技术还利用EMC Documentum管理所有技术维护信息。EMC Documentum与1000多家制造商一起,为公司的飞机提供产品和组件,从电子导航计算机到轮胎。因此,汉莎航空技术计划在未来进一步扩展其 Documentum平台,例如在其中增加与飞机滞留有关的所有信息,并通过门户向用户提供。并且还将计划将质量管理融入到门户中,使得用户可以深入了解与其相关的过程文档。
  中国先行者直接受益
  包括金融、电信、政府等行业的国内企业,已经认识到了内容管理将为其带来的价值,金融行业方面,中国四大商业银行中的中国银行、建设银行、农业银行,以及光大银行已经在利用EMC Documentum软件平台有效地管理信息内容。而在此之前,银行各种凭证单据查找困难,保存不便。EMC Documentum凭借在海量存储、安全管理、快速定位,信息共享和内容关联等方面的能力,将各种纸质凭证票据转变为电子影像,以便于传输至集中的业务处理中心,由业务处理中心以影像为基础进行集中处理,这既可以改善目前业务分散低效的不足,也符合银行业务大集中的构想。电信行业方面,某通信公司原来每个服务渠道都有各自处理详单的方式,造成系统压力、响应时间、运营成本、客户服务等多方面的问题,通过实施EMC Documentum内容管理软件,该通信公司成功实施了统一的详单管理平台,实现了详单的海量存储。EMC Documentum平台可以帮助不同行业的企业,在充分利用企业信息;缩短上市时间;提升客户满意度;提高供应链效率;降低运营成本;提升创新能力和整体竞争优势等方面做到明显改善。

 

  • 让企业内容管理像搭积木一样简单

 

  研究显示,企业管理数字内容量几乎每18个月翻一番。而一家国际著名研究咨询机构的报告更指出,企业所产生的内容量每6~8个月便以双倍或更快的速率急增。呈爆炸性增长的内容信息深深困扰着企业,也使得企业内容管理(EnterpriseContentManagement,ECM)成为继ERP、 CRM等应用系统之后,成为全球企业关注的焦点。然而,目前对于中国而言,企业内容管理还属新生概念。

  ECM企业内容管理迈向集成时代

  企业内容管理相对于所谓“内容”,指的是企业和单位中广泛存在的各种结构化、非结构化的文件和数据。随着互联网和内联网的广泛发展,Web页面成为“内容”的主流。内容中蕴涵了丰富的信息,是企业的“知识”的重要组成部分。内容已经在逐步成为企业和单位的重要资产,管理好内容,利用好内容,将使得企业和单位在有形和无形中获得巨大的回报。内容服务或叫内容管理已经成为企业/政务信息化的重要组成部分,在电子商务/电子政务蓝图中占据了一席重要之地。

  随着软件技术的发展,市场上出现了林林总总的内容管理产品,他们在各种层次上满足了客户对于内容管理的需求。不同的产品满足了内容管理不同环节的需要。

  传统内容管理涵盖了内容的创建、存储、发布、交付等过程,突出内容与形式分离,对应工作人员的分工。负责形式的人员如设计师通过内容管理系统提供的设计界面对内容的最终表现形式进行设计,通常体现为内容管理系统中的模板制作。而内容的创建人员则专注于内容本身,无需关心内容的形式。在内容管理系统内部,系统通过模板与数据的结合,从而自动完成了内容与形式的结合,将结合的结果发布出来,并交付给内容的消费者。传统的内容管理功能独立,从内容的进入,到内容的交付,一般都不与外界系统打交道,就像独行侠一样,在企业中只能起到有限的作用。但是随着企业和单位的信息化建设,各种信息系统的实施和部署,企业和单位中的各种数据和信息到处分布,如果应用间没有集成,势必造成数据的重复,同时不能充分利用数据,各种业务流程也无法整合。工作人员不得不在多个应用间切换,将数据反复录入到多个应用里。因此,人们提出了“企业应用集成(EAI)”的概念,并发展了专门的工具应用用于辅助企业进行应用间的集成。在内容管理领域,也相应地进入了“内容集成(ContentIntegration)”的时代。

  让企业内容管理像搭积木一样简单

  步入集成时代的企业内容管理堪称中国信息化发展的加速器,如何为企业所用?EMC软件事业部大中国区技术经理李卫平认为:经过20多年的发展,ERP经过几个这样的波浪已经日益成熟,用户的需求也日趋明朗。企业可以看到,数据库做的是应用系统,不管是ERP、人事、财务,还是经销、管理人员这方面的数据,用数据库管理起来非常清楚。但是有时候像合同管理这样的事情,ERP做起来可能就比较吃力。一个项目500份合同,有大量的文档在里面,不知道哪个合同是最新的,有些时候需要查询过去某份合同是如何签订的,条款是怎样的,用ERP也许可以找到,但是可能要花很多时间。这就形成了对内容管理的需求。因此不仅是软件厂商或者产品在推动,而是用户自发的有这样的需求。

  国内的金融行业就是最典型的一个例子,内容管理在银行业被称为引向工作流,这是一种业务系统,而并非是一种锦上添花的系统。比如申请信用卡时,在整个申请表、照片等一系列的东西递进之后,审批过程需要非常清楚。此外,随着中国经济的飞速发展,国际贸易的规模越来越大。这些大量的国际结算都是通过影像来做的。通过影像来进行相关业务,如何签协议,如何展示产品的清单,产品的配置说明,到什么程度、付什么款,另外还包括票据的传递,这些都需要通过影像工作流系统来完成。

  当ERP,CRM,SCM系统日益担当起管理企业业务流程的结构化数据的同时,企业却逐渐陷入于巨量增加的非结构化数据海洋中。文档,邮件,报表,网页,声音,影像,多媒体影像,扫描文件等非结构化数据或数字内容正在以每年200%的速度增加。而EMCDocumentum则以其稳定的企业级统一平台、灵活的面向应用的解决方案帮助企业实现了非结构化内容的全面管理和利用,并于近日推出了新一代企业内容管理解决方案,为集成时代的企业内容管理提供了更为便捷的途径。

  企业内容管理的最初应用源于PC流行伊始时代,对于企业文档、图书馆、档案馆等纸质文档及内容向数字化文档及内容转化时产生的需求。十余年后的今天,内容的形势和实质仍在不断的发展和演进,企业内容管理的内涵和外延也就在不断的随之变化和完善。尽管目前企业内容管理在中国的发展还处于初级阶段,用户对ECM的认知较弱。但我们有理由相信,在业务需求和电子文档归档要求的驱动下,在厂商推出越来越多可以“像搭积木一样简单”的管理途径,中国企业内容管理的应用市场将在未来迅速增长,并极可能由此引发信息化的新热潮。

[转]企业内容管理:一个正在崛起的新兴市场

  企业内容管理市场概况

  企业内容管理(Enterprise Content Management,ECM)目前在国内非常热门,市场发展迅速。2004年,ECM市场发生了很多重组和兼并的重大事件。Interwoven公司完成了自己的收购目标,完善了自己的ECM产品线。这一系列的行业并购将更多的技术和应用吸纳到ECM范畴中,使得ECM产品和市场越来越成熟,而越来越多的行业巨头进入该领域,也说明了ECM市场的未来的广阔前景。

  2004年6月Gartner Dataquest发布的ECM市场报告显示,ECM市场估计将超过10亿美元,并且处于不断增长的状态。全球内容和文档管理软件市场收入从2002年的9.4亿美元增长到了2003年的10.3亿美元,增长额度为9.2%。之后,该市场还将以每年百分之十几的速度增长,并且预期在 2008年超过17亿美元。据IDC最新报告,亚太地区内容管理软件市场有望从2003年的1.094 2亿美元增长至2008年的2.1928亿美元,5年的复合年增长率14.9%。这些数据也表明了企业内容管理将成为下一个经济爆发的增长点!

  那么究竟什么是内容及内容管理?

  在谈内容管理之前,必须先弄清楚一个概念—内容。很多人不了解企业内容的范畴,认为仅仅指产品信息。事实上,这是大错特错的。企业内容可能是文件、档案、图形、影像、网页、声音、视讯,产品数据、研发文件、数据库表格、应用程序代码、合约等结构化或非结构化数据。内容范围广、格式多样,是一个企业最重要的资产。

  根据Jupiter Research的报告,企业所产生的内容量每6~8个月便以双倍或更快的速率急增。大量无序的内容给企业和客户造成了困惑,从而导致企业内容管理ECM 腾空出世。关于企业内容管理的定义目前业内没有一个统一、明确的表示,各家多有自己的说法。Interwoven作为一家专业的企业内容管理解决方案提供商,在行业标准制定等方面做出了不懈的努力。Interwoven认为:企业内容管理是指在内容上进行包括收集、格式转换、审核、分类、版本控制、内容测试、发布等处理的过程。应该包括内容存储、搜索引擎、编辑工具、存档管理工具、个性化工具、安全控制、内容的版本管理等功能。

  企业内容管理的效益

  企业内容管理能有效率地生产、管理与发布多元化的内容,轻易满足政府与企业内部员工与管理阶层,以及外部合作厂商、客户与企业投资者对内容的需求。在 Interwoven的客户中,相当多的成功案例都是因为内容管理而使原有的资产增值助企业获益。通过内容管理,政府和企业可以实现把正确、实时的内容传递给适当的人,并且进行最有效率的管理,藉以在信息产生后,能反复利用,以此大幅降低花费在数据管理、查询与检索上的时间与成本。

  好的内容管理能够有效管理不同形式、平台、服务器的多元化内容,严格管理需要发布的信息,以确保信息的正确性,为企业提供一个高扩展性、低成本的文档、多媒体、程序代码和网站等内容平台。同时还能改善现有网站从协调开发到最后维护的流程,解决过度集中处理的瓶颈;为不同内容提供者提供各种内容输入渠道,如Web, XML, Web Service, FTP等,提高网页更新速度,提升内容丰富度,增进服务效率。

6/25/2008

近期充电计划

一.学习时间

2008年6月25日~2008年7月10日

工作闲暇时间:2小时/天

中午休息时间:30分钟/天

晚上休息时间:2小时/天(22:30~00:30)

二.学习内容

  1. 数据库方面
    • Oracle:做到能解决常规的开发和维护问题。
  2. J2EE技术方面
    • Spring:在原有基础上深入学习,仔细学习参考手册,达到熟练水平
    • Hibernate:在原有基础上深入学习,仔细学习参考手册,能够分析、解决常见问题
    • Struts:回顾V1.2版本,通过实例学习V2
  3. 分析设计方面
    • 领域分析建模:学习DDD精编版内内容
    • UML:在原有基础上进行巩固,做到熟练使用
  4. 专业领域方面
    • 内容管理系统:基本概念、基础知识等
    • EMC Documentum产品学习:从官网网站及技术社区寻找资料学习
    • 银行领域相关业务知识:网上了解
  5. 项目管理
    • 项目管理基础知识:巩固原有知识,复习,思考
    • 具体项目管理方法:从JavaEye等网站上,学习、了解
6/24/2008

搭建AndRoid开发环境

下载开发资源
 
1、下载最新Android SDK
 http://code.google.com/android/download.html
选择Windows 版本的SDK,下载后直接解压缩就可以使用,为了在控制台中直接使用SDK中的工具,把SDK 的目录添加到Windows 的path 环境变量中。
2 、下载 JDK6,(JDK5开发的时候会有一些Bug)
http://java.sun.com/javase/downloads/index.jsp 安装后,设置JDK环境变量(java_home,classpath,path)
3、下载Eclipse 3.2,3.3版本(开发Android的IDE)
http://www.eclipse.org/downloads/

更新 Eclipse,下载 ADT(Android 开发插件)

1.  启动Eclipse, 选择 Help > Software Updates > Find and Install.... 
2.  弹出对话框后,选择 Search for new features to install 点击Next. 
3.  点击 New Remote Site. 
4.  在编辑框中输入更新插件的网址:
https://dl-ssl.google.com/android/eclipse/. 点击 OK. 
5.  看到一个更新的列表,点击sFinish. 
6.  在返回的对话框中选择 Android Plugin > Eclipse Integration >
Android Development Tools 并且点击 Next. 
7.  选择 Accept terms of the license agreement, 点击Next. 
8.  点击 Finish. 
9.  点击Install All. 
10. 重新启动 Eclipse. 
11. 重启Eclipse 后设置Android属性中的 Android SDK 目录(不包括SDK下的Tools,比如 D:\android_XXXXX): 
a.  选择 Window > Preferences... 打开编辑属性窗口
b.  选择 Android 属性面板
c.  加入AndroidSDK的目录点击 Browse... 
d.  点击 Apply, 和 OK 
12.设置 Eclipse的JavaJDK的属性设置。
A  选择 Window > Preferences... 打开编辑属性窗口
B  选择 Java 属性面板 
C  选择Java编译器为6.0 
D  点击 Apply, 和 OK

使用 Eclipse开发 Android 应用 
使用EclipseIDE开发一个 Android 应用。首先是创建一个 Android 工程,然后是设置应用启动配置。然后可以编辑代码,启动,调试应用。
 
创建一个 Android 工程
ADT 插件提供了一个新的工程向导帮助我们快速的建立 Android 工程和编辑现存的Android项目的代码。 
按照下面的步骤建立Android工程:
1.  选择 File > New > Project 
2.  选择 Android > Android Project, and 点击 Next 
3.  设置工程的用途
o  选择 Create new project in workspace 可以建立一个新的
Android工程,输入工程的名字,代码的开发包的名字,应用界面的类名字,应用程序的标题的名字。
o  选择 Create project from existing source 可以根据现存的代码建立一个工程. 通过这个选项可以建立并运行现存的Google提供的Example Application (在Android SDK的目录中可以找到)
4.  点击 Finish.
ADT插件将会为你的工程建立这些文件和目录:
*  src/   代码文件存放的目录. 
*  res/   资源文件目录. 
*  AndroidManifest.xml   应用工程的主配置文件.

建立一个启动配置
 
在使用Eclipse调试程序之前,必须为工程建立一个启动配置:
1.  选择 Run > Open Run Dialog... or Run > Open Debug Dialog...  
2.  在左边的类型中选择 Android Application 点击New. 
3.  输入一个配置的名字. 
4.  在 Android 选项中, 选择一个应用的界面最为应用启动的主界面. 
5.  点击 Apply保存配置, 点击Run 或者 Debug开始调试程序. 
调试应用程序
一旦建立了工程启动配置就可以按照如下的步骤调试程序:从Eclipse的主菜单中选择 Run > Run or Run > Debug 。
如果需要当然还可以重新配置启动参数,(比如选择其他的程序界面作为启动的主界面)

Hello, Android!
环境配置完成后就可以开始为Android 编写第一个HelloWorld 了。一个一般的Android应用开发的步骤包括如下几个步骤:
*  建立工程
*  构造UI
*  运行程序

建立工程
如何建立工程不再赘述,下面是建立HelloWorld 工程的抓图. 
1.  Create a new Android Project 

选择 "Android Project", 点击 Next button.
2.  填入工程的相关的名字

Here's what each field on this screen means:
Project Name                  在计算机中存储工程的目录的名字
Package Name                包名—— 参考Java相关的概念 比如com.china.hello
Activity Name   UI        界面窗口的类名,从Activity继承而来
Application Name          应用的标题名字

3.  便捷自动产生的代码: 
产生的代码类似:
package com.china.hello;
import android.app.Activity;
import android.os.Bundle;
 
public class HelloChina extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
    }
}

构造  UI
这是最终的helloWorldAandroid 的代码,下面逐一解释。
package com.china.hello;
 
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloChina extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        //setContentView(R.layout.main);
        TextView tv = new TextView(this);
        tv.setText("这是一个测试Android的helloWorld");
        setContentView(tv);
        
    }
}在类前面添加import android.widget.TextView;(Java 中的概念,不多做介绍)
在Android 中,用户界面控件被封装成了各种Class叫做Views。一个View 是一个可以显示的控件对象,比如RadioButton,Animation,TextLable 等。其中的一个简单的控件是TextView:
TextView tv = new TextView(this);
传 入TextView构造函数的参数是一个 Context 对象,通过这个对象可以使用系统提供的功能接口,比如加载资源,访问数据库和共享数据等等。Activity类从Context 类继承而来,所以Activity本身是一个Context(Java中的继承概念)。
TextView 对象构建以后就可以设置要显示的数据了。
 
tv.setText("这是一个测试Android的helloWorld");
 
最后是连接TextView到屏幕, 类似这样:
setContentView(tv);
setContentView() 方法可以控制具体哪一个控件和系统的 UI 联系起来(我的理
解是设置为主显示View)。如果没有设置,屏幕中将会显示空白。

运行程序: Hello, Android
点击Run 就可以看到如下的窗口(如何配置启动参数,参考前面)
模拟器启动起来,应用程序启动起来了。
5/9/2008

[转]解决IE下载下载中文文件名乱码问题

公司一个Ajax软件系统在客户现声遇到了下载问题。google出下以文章,得以解决。
 
 
正文:
 
关于中文文件下载的问题,网上的咨询和答疑已经很多,我原来处理下载的代码如下:
    
    response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
  下载的程序里有了这句,一般在IE6的下载提示框上将正确显示文件的名字,无论是简体中文,还是日文。不过当时确实没有仔细测试文件名很长的中文文件名。 先如今经过仔细测试,发现文字只要超过17个字,就不能下载了。经过好一番google和反复测试,总算对这个问题有了系统的认识,分列如下:

    . 通过我原来的方式,也就是先用URLEncoder编码,当中文文字超过17个时,IE6 无法下载文件。这是IE的bug,参见微软的知识库文章 KB816868 。原因可能是因为ie在处理 Response Header 的时候,对header的长度限制在150字节左右。而一个汉字编码成UTF-8是9个字节,那么17个字便是153个字节,所以便会报错。微软提供了一个补丁,可以从 这里 下载。这个补丁需要先安装ie6 sp1。因为我平时勤打补丁,我的IE6版本号是 6.0.2800.1106.xpsp2_xxxxx。所以我可能已经安装过了补丁,从而可以下载,但仍然出现文件名被截断的现象。微软让我们等待IE下 一个service pack的发布。我今天也上网看到了好消息,迫于firefox的压力,IE7可能在年中发布。另外,Firefox 不支持这样的方式,将把编码后的%xx%xx直接作为文件名显示。


    . 我尝试使用 javamail 的MimeUtility.encode()方法来编码文件名,也就是编码成 =?gb2312?B?xxxxxxxx?= 这样的形式,并从 RFC1522 中找到对应的标准支持。不过很遗憾,IE6并不支持这一个标准。我试了一下,Firefox是支持的。

    . 按网上很多人提供的解决方案:将文件名编码成ISO8859-1似乎是有效的解决方案,代码如下:
    
    response.setHeader( "Content-Disposition", "attachment;filename="  + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) );
    
    在确保附件文件名都是简 体中文字的情况下,那么这个办法确实是最有效的,不用让客户逐个的升级IE。如果台湾同胞用,把gb2312改成big5就行。但现在的系统通常都加入了 国际化的支持,普遍使用UTF-8。如果文件名中又有简体中文字,又有繁体中文,还有日文。那么乱码便产生了。另外,在我的电脑上Firefox (v1.0-en)下载也是乱码。

    折中考虑,我结合了一、三的方式,代码片断如下:

        String fileName = URLEncoder.encode(atta.getFileName(), "UTF-8");
        /*
         * see http://support.microsoft.com/default.aspx?kbid=816868
         */
        if (fileName.length() > 150) {
            String guessCharset = xxxx /*根据request的locale 得出可能的编码,中文操作系统通常是gb2312*/
            fileName = new String(atta.getFileName().getBytes(guessCharset), "ISO8859-1");
        }
        response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
        
    暂且不考虑 Firefox 是因为它目前似乎还没有有力侵食到IE的企业用户市场。影响客户买单的常常是进度,而不是兼容度。
/////////////////////
下面是解决文件名空格问题

String fileName = StringUtils.trim(file.getName());

String formatFileName = encodingFileName(name);//在后面定义方法encodingFileName(String fileName);
response.setHeader("Content-Disposition", "attachment; filename=" + formatFileName );

//处理文件名中出现的空格   

//其中%20是空格在UTF-8下的编码

public static String encodingFileName(String fileName) {
        String returnFileName = "";
        try {
            returnFileName = URLEncoder.encode(fileName, "UTF-8");
            returnFileName = StringUtils.replace(returnFileName, "+", "%20");
            if (returnFileName.length() > 150) {
                returnFileName = new String(fileName.getBytes("GB2312"), "ISO8859-1");
                returnFileName = StringUtils.replace(returnFileName, " ", "%20");
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            if (log.isWarnEnabled()) {
                log.info("Don't support this encoding ...");
            }
        }
        return returnFileName;
    }