WEB开发网
开发学院WEB开发Jsp 使用JAVA技术实现文件的上传 阅读

使用JAVA技术实现文件的上传

 2008-01-05 08:36:06 来源:WEB开发网   
核心提示:下面是一个用来上传下达的小程序,希望大家给予指教.import java.io.*;import java.util.*;import java.text.*;import javax.mail.*;import javax.servlet.*;import javax.activation.*;import java



下面是一个用来上传下达的小程序,希望大家给予指教.

import java.io.*;
import java.util.*;
import java.text.*;
import javax.mail.*;
import javax.servlet.*;
import javax.activation.*;
import javax.servlet.http.*;
import javax.mail.internet.*;
import javax.mail.internet.MimeMultipart;

/**
* @author 
*
*<p>
*<p> 【使用例】
*<p>  try {
*<p>    Upload load=new Upload();
*<p>    load.setDir("i:\\ztytest\\");     *<p>    load.doUpload(req,res);        *<p>                         //HttpServletRequest req
*<p>                         //HttpServletResponse res
*<p>  }
*<p>  catch( Exception e ) {
*<p>    return;
*<p>  }
*/

public class Upload extends HttpServlet {
  public String strDir;

  public Upload()
  {
  }

  public void doUpload(HttpServletRequest req, HttpServletResponse res)
    throws IOException,MessagingException
  {
   String boundary=req.getHeader("Content-Type");
   int pos=boundary.indexOf('=');
   boundary=boundary.substring(pos+1);
   boundary="--"+ boundary;
   ServletInputStream in=req.getInputStream() ;
   byte[] bytes=new byte[512];
   int state=0;
   ByteArrayOutputStream buffer=new ByteArrayOutputStream();
   String name=null;
   String value=null;
   String filename=null;
   String contentType=null;

   int i=in.readLine(bytes,0,512);

   while (-1!=i)
   {
    String st=new String(bytes,0,i);
    if (st.startsWith(boundary))
    {
      state=0;
      System.out.PRintln(filename);
      if (null!=name)
      {
        if(buffer.size()>2)
        {
          FileOutputStream outStream = new FileOutputStream(strDir+filename);
          outStream.write(buffer.toByteArray(), 0, buffer.toByteArray().length);
          outStream.close();
        }
        name=null;
        value=null;
        filename=null;
        contentType=null;
        buffer=new ByteArrayOutputStream();
      }
    }//end of st.startsWith(boundary)
    else if (st.startsWith("Content-Disposition: form-data") && state==0)
    {
      StringTokenizer tokenizer=new StringTokenizer(st,";=\"");
      while(tokenizer.hasMoreTokens())
      {
        String token=tokenizer.nextToken();
        if(token.trim().startsWith("name"))
        {
          name=tokenizer.nextToken();
          state=2;
        }
        else if(token.trim().startsWith("filename"))
        {
          filename=tokenizer.nextToken();
          StringTokenizer ftokenizer=new StringTokenizer(filename,"\\");
          filename=ftokenizer.nextToken();
          while(ftokenizer.hasMoreTokens())
            filename=ftokenizer.nextToken();
          state=1;
          break;
        }
      }
    }//end state=0
    else if (st.startsWith("Content-Type") && state==1)
    {
      pos=st.indexOf(":");
      contentType=st.substring(pos+2,st.length()-2);

    }//end state=1
    else if (state==1)
      state=3;
    else if (st.equals("\r\n")&&state==2)
      state=4;
    else if (state==3)
      buffer.write(bytes,0,i);
    else if (state==4)
      value=value==null?st:value+st;

    i=in.readLine(bytes,0,512);
   }//end while

  }

  public void setDir(String strSavePath)
  {
    strDir =strSavePath;
  }

  class ByteDataSource implements DataSource
  {
    byte[] bytes;
    String contentType;
    String name;

    ByteDataSource(byte[] bytes,String contentType,String name)
    {
      this.bytes=bytes;
      this.contentType=contentType;
      this.name=name;
    }

    public String getContentType()
    {
      return contentType;
    }

    public InputStream getInputStream()
    {
      return new ByteArrayInputStream(bytes,0,bytes.length-2);
    }

    public String getName()
    {
      return name;
    }

    public OutputStream getOutputStream() throws IOException
    {
      throw new FileNotFoundException();
    }
  }//end of class
}


Tags:使用 JAVA 技术

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接