如题,没有用组件,在IE6上可以正常上传,FF和CHROME运行后提示也是上传成功的,只是到文件夹里一看是生成了一个叫Content-Disposition的文件,容量为0.高手指点.

解决方案 »

  1.   

    <%@ 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的文件
      

  2.   

    好吧,我知道许多人没兴趣看长代码的,我再缩小的范围吧,主要是以下代码,
    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的不同,所以后面一系列的值也就都取错了,但我不知道怎么改,高手帮忙看看