|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你通过从书的数量和开发周期及运行速度来证明:net和ruby要比java简单。js|攻略|上传|下载4、文件下载篇
1、下载链接页面download.html
页面源码以下:
<!--
文件名:download.html
纵横软件制造中央雨亦奇(zhsoft88@sohu.com)
-->
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<title>下载</title>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
</head>
<body>
<ahref="jsp/do_download.jsp">点击下载</a>
</body>
</html>
2、下载处置页面do_download.jspdo_download.jsp展现了怎样使用jspSmartUpload组件来下载文件,从上面的源码中就能够看到,下载何其复杂。
源码以下:
<%@pagecontentType="text/html;charset=gb2312"
import="com.jspsmart.upload.*"%><%
//新建一个SmartUpload对象
SmartUploadsu=newSmartUpload();
//初始化
su.initialize(pageContext);
//设定contentDisposition为null以克制扫瞄器主动翻开文件,
//包管点击链接后是下载文件。若不设定,则下载的文件扩大名为
//doc时,扫瞄器将主动用word翻开它。扩大名为pdf时,
//扫瞄器将用acrobat翻开。
su.setContentDisposition(null);
//下载文件
su.downloadFile("/upload/怎样赚取我的第一桶金.doc");
%>
注重,实行下载的页面,在Java剧本局限外(即<%...%>以外),不要包括HTML代码、空格、回车或换行等字符,有的话将不克不及准确下载。不信的话,能够在上述源码中%><%之间到场一个换行符,再下载一下,包管堕落。由于它影响了前往给扫瞄器的数据流,招致剖析堕落。
3、怎样下载中文文件
jspSmartUpload固然能下载文件,但对中文撑持不敷。若下载的文件名中有汉字,则扫瞄器在提醒另存的文件名时,显现的是一堆乱码,很扫人兴。下面的例子就是如许。(这个成绩也是浩瀚下载组件所存在的成绩,很少有人办理,搜刮不到相干材料,可叹!)
为了给jspSmartUpload组件增添下载中文文件的撑持,我对该组件举行了研讨,发明对前往给扫瞄器的另存文件名举行UTF-8编码后,扫瞄器便能准确显现中文名字了。这是一个使人乐意的发明。因而我对jspSmartUpload组件的SmartUpload类做了晋级处置,增添了toUtf8String这个办法,修改部分源码以下:
publicvoiddownloadFile(Strings,Strings1,Strings2,inti)
throwsServletException,IOException,SmartUploadException
{
if(s==null)
thrownewIllegalArgumentException("File"+s+
"notfound(1040).");
if(s.equals(""))
thrownewIllegalArgumentException("File"+s+
"notfound(1040).");
if(!isVirtual(s)&&m_denyPhysicalPath)
thrownewSecurityException("Physicalpathis
denied(1035).");
if(isVirtual(s))
s=m_application.getRealPath(s);
java.io.Filefile=newjava.io.File(s);
FileInputStreamfileinputstream=newFileInputStream(file);
longl=file.length();
booleanflag=false;
intk=0;
byteabyte0[]=newbyte[i];
if(s1==null)
m_response.setContentType("application/x-msdownload");
else
if(s1.length()==0)
m_response.setContentType("application/x-msdownload");
else
m_response.setContentType(s1);
m_response.setContentLength((int)l);
m_contentDisposition=m_contentDisposition!=null?
m_contentDisposition:"attachment;";
if(s2==null)
m_response.setHeader("Content-Disposition",
m_contentDisposition+"filename="+
toUtf8String(getFileName(s)));
else
if(s2.length()==0)
m_response.setHeader("Content-Disposition",
m_contentDisposition);
else
m_response.setHeader("Content-Disposition",
m_contentDisposition+"filename="+toUtf8String(s2));
while((long)k<l)
{
intj=fileinputstream.read(abyte0,0,i);
k+=j;
m_response.getOutputStream().write(abyte0,0,j);
}
fileinputstream.close();
}
/**
*将文件名中的汉字转为UTF8编码的串,以便下载时能准确显现另存的文件名.
*纵横软件制造中央雨亦奇2003.08.01
*@params原文件名
*@return从头编码后的文件名
*/
publicstaticStringtoUtf8String(Strings){
StringBuffersb=newStringBuffer();
for(inti=0;i<s.length();i++){
charc=s.charAt(i);
if(c>=0&&c<=255){
sb.append(c);
}else{
byte[]b;
try{
b=Character.toString(c).getBytes("utf-8");
}catch(Exceptionex){
System.out.println(ex);
b=newbyte[0];
}
for(intj=0;j<b.length;j++){
intk=b[j];
if(k<0)k+=256;
sb.append("%"+Integer.toHexString(k).
toUpperCase());
}
}
}
returnsb.toString();
}
注重源码中粗体部分,原jspSmartUpload组件对前往的文件未作任那边理,如今做了编码的转换事情,将文件名转换为UTF-8情势的编码情势。UTF-8编码对英文未作任那边理,对中文则必要转换为%XX的情势。toUtf8String办法中,间接使用Java言语供应的编码转换办法取得汉字字符的UTF-8编码,以后将其转换为%XX的情势。
将源码编译后打包成jspSmartUpload.jar,拷贝到Tomcat的shared/lib目次下(可为一切WEB使用程序所共享),然后重启Tomcat服务器就能够一般下载含有中文名字的文件了。另,toUtf8String办法也可用于转换含有中文的超等链接,以包管链接的无效,由于有的WEB服务器不撑持中文链接。
小结:jspSmartUpload组件是使用JSP举行B/S程序开辟过程当中常常利用的上传下载组件,它利用复杂,便利。如今我又为其加上了下载中文名字的文件的撑持,端的是为虎傅翼,势必博得更多开辟者的喜爱。
java是一种面向对象的编程语言,优点是可移植性比较高,最初设计时就是本着一次编写到处执行设计的。可以开发各种应用程序和游戏,不过速度没有c++快,所以一般是不用java来编写应用程序和电脑游戏。 |
|