JSP做文件上传,结果变出个名为Content-Disposition文件 如题,没有用组件,在IE6上可以正常上传,FF和CHROME运行后提示也是上传成功的,只是到文件夹里一看是生成了一个叫Content-Disposition的文件,容量为0.高手指点. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <%@ page contentType="text/html; charset=gb2312" language="java" import="java.io.*" errorPage="" %><%String ext="jpg,bmp,gif";//允许上传文件的扩展名,中间以逗号隔开int size=500000; //限定上传文件的大小,以字节为单位,默认为500000字节,也就是500K文件,注意上传文件不要大于虚拟机内存大小,否则会产生溢出String upPath="upload"; //设置文件上传路径,相对于站点根目录而言boolean extBoolean=true;String[] extName=ext.split(",");String path=request.getRealPath("\\");if((request.getContentType()!=null)&&(request.getContentType().toLowerCase().startsWith("multipart"))){byte[] b = new byte[request.getContentLength()];//创建一个数组,用来接收数据InputStream is=request.getInputStream();//创建一个流int d= 0;int off=0;while((d = is.read(b,off,512))!= -1) {off=off+d;}//从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中is.close();int i=0;while(b[i]!=13){i++;}//这是向下移一行//out.print(new String(b,0,i)+"<br>");//这行打印的是第一行字符int j=i;while(!(b[j] == 13 && b[j + 2] == 13)){j++;}String heade=new String(b,i+2,j-i-2);//取header部分int start=heade.lastIndexOf("\\")+1;int end=heade.indexOf("\"\r");String filename=heade.substring(start,end);//取文件名ext=filename.substring(filename.indexOf(".")+1,filename.length());//取扩展名for(int a=0;a<extName.length;a++){ if(ext.equalsIgnoreCase(extName[a])){ extBoolean=false; break; }}if(extBoolean){ out.println("<script>alert('上传文件类型不正确,请重试!');</script>");}else{ int s=0; int n=0; for(n=j;n<b.length;n++){ if(b[n]==b[s]){ s++; if(s==i){ break; } }else{ s=0; } } int fileStart=j+2+2; int fileEnd=n-j-2-2-i-1; if(fileEnd-fileStart>size){ out.println("<script>alert('上传超出限制大小,请重试!');</script>"); }else{ try{ File file=new File(path+upPath); file.mkdir(); file=new File(path+upPath,filename); FileOutputStream fos=new FileOutputStream(file); fos.write(b,fileStart,fileEnd); fos.close(); out.println("<font color='#FF0000'>上传成功</font>"); out.println("<script>parent.callback('upload file success');</script>"); }catch(Exception e){ out.println("<font color='#FF0000'>上传失败</font>"); out.println("<script>parent.callback('upload file error');</script>"); } }}}%><title>远方魅影JSP系列之无组件上传2.0</title><!-- 远方魅影JSP系列之无组件上传1.0 --><font color="#0000FF">当前站点根目录为:</font><%=path+upPath%><form name="form1" enctype="multipart/form-data" method="post" action=""> <input name="file" type="file" size="45"> <input type="submit" name="Submit" value="文件上传"></form>这是我网上找来的代码,IE下正常,FF和CHROME上传图片到指定文件夹后是一个叫Content-Disposition的文件 好吧,我知道许多人没兴趣看长代码的,我再缩小的范围吧,主要是以下代码,String heade=new String(b,i+2,j-i-2);//取header部分int start=heade.lastIndexOf("\\")+1;int end=heade.indexOf("\"\r");String filename=heade.substring(start,end);//取文件名ext=filename.substring(filename.indexOf(".")+1,filename.length());//取扩展名直接输出header,IE如下:Content-Disposition: form-data; name="file"; filename="D:\cccc\2.jpg" Content-Type: image/pjpeFF如下:Content-Disposition: form-data; name="file"; filename="2.jpg" Content-Type: image/jpeg因为filename的不同,所以后面一系列的值也就都取错了,但我不知道怎么改,高手帮忙看看 java web关于事件处理完成与否的验证 2009看你 牛不牛?java最新异常,google找了半天也没找到同样的,看谁能解决 javabean 修改编译后怎么没有更新? jsf框架 中如何将一个xml解析,并生成jsf标签? 求一句sql语句!!! 关于hibernate更新数据库的问题! 求助Struts验证问题 tomcat配置 请教resin编译抛出错误问题!请高手帮忙!在线等!!! BBS-CS社区重新开放! 有关<jsp:getProperty>出错,请大虾帮忙 Flex融合Jsp问题 请大家进来看看
<%
String ext="jpg,bmp,gif";//允许上传文件的扩展名,中间以逗号隔开
int size=500000; //限定上传文件的大小,以字节为单位,默认为500000字节,也就是500K文件,注意上传文件不要大于虚拟机内存大小,否则会产生溢出
String upPath="upload"; //设置文件上传路径,相对于站点根目录而言boolean extBoolean=true;
String[] extName=ext.split(",");
String path=request.getRealPath("\\");
if((request.getContentType()!=null)&&(request.getContentType().toLowerCase().startsWith("multipart"))){
byte[] b = new byte[request.getContentLength()];//创建一个数组,用来接收数据
InputStream is=request.getInputStream();//创建一个流int d= 0;
int off=0;
while((d = is.read(b,off,512))!= -1) {
off=off+d;
}//从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中
is.close();int i=0;
while(b[i]!=13){
i++;
}//这是向下移一行
//out.print(new String(b,0,i)+"<br>");//这行打印的是第一行字符
int j=i;
while(!(b[j] == 13 && b[j + 2] == 13)){
j++;
}
String heade=new String(b,i+2,j-i-2);//取header部分
int start=heade.lastIndexOf("\\")+1;
int end=heade.indexOf("\"\r");
String filename=heade.substring(start,end);//取文件名
ext=filename.substring(filename.indexOf(".")+1,filename.length());//取扩展名
for(int a=0;a<extName.length;a++){
if(ext.equalsIgnoreCase(extName[a])){
extBoolean=false;
break;
}
}
if(extBoolean){
out.println("<script>alert('上传文件类型不正确,请重试!');</script>");
}else{
int s=0;
int n=0;
for(n=j;n<b.length;n++){
if(b[n]==b[s]){
s++;
if(s==i){
break;
}
}else{
s=0;
}
}
int fileStart=j+2+2;
int fileEnd=n-j-2-2-i-1;
if(fileEnd-fileStart>size){
out.println("<script>alert('上传超出限制大小,请重试!');</script>");
}else{
try{
File file=new File(path+upPath);
file.mkdir();
file=new File(path+upPath,filename);
FileOutputStream fos=new FileOutputStream(file);
fos.write(b,fileStart,fileEnd);
fos.close();
out.println("<font color='#FF0000'>上传成功</font>");
out.println("<script>parent.callback('upload file success');</script>");
}catch(Exception e){
out.println("<font color='#FF0000'>上传失败</font>");
out.println("<script>parent.callback('upload file error');</script>");
}
}
}
}
%><title>远方魅影JSP系列之无组件上传2.0</title><!-- 远方魅影JSP系列之无组件上传1.0 -->
<font color="#0000FF">当前站点根目录为:</font><%=path+upPath%>
<form name="form1" enctype="multipart/form-data" method="post" action="">
<input name="file" type="file" size="45">
<input type="submit" name="Submit" value="文件上传">
</form>这是我网上找来的代码,IE下正常,FF和CHROME上传图片到指定文件夹后是一个叫Content-Disposition的文件
String heade=new String(b,i+2,j-i-2);//取header部分
int start=heade.lastIndexOf("\\")+1;
int end=heade.indexOf("\"\r");
String filename=heade.substring(start,end);//取文件名
ext=filename.substring(filename.indexOf(".")+1,filename.length());//取扩展名
直接输出header,
IE如下:
Content-Disposition: form-data; name="file"; filename="D:\cccc\2.jpg" Content-Type: image/pjpe
FF如下:Content-Disposition: form-data; name="file"; filename="2.jpg" Content-Type: image/jpeg因为filename的不同,所以后面一系列的值也就都取错了,但我不知道怎么改,高手帮忙看看