用java实现上传下载功能

package bean.sendmail;

import java.io.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletException;

public class upload{
  private static String newline = "/n";
  private String uploadDirectory = ".";
  private String ContentType = "";
  private String CharacterEncoding = "";
  private String strFileName = "";
  private long iFileSize = 0;
    
  private String getFileName(String s){
     int i = s.lastIndexOf("//");
     if(i < 0 || i >= s.length() - 1){
        i = s.lastIndexOf("/");
        if(i < 0 || i >= s.length() - 1)
           return s;
     }
     strFileName = s.substring(i + 1);
     return s.substring(i + 1);
  }
 
  public String getUploadFileName(){
     return strFileName;
  }
 
  public long getFileSize(){
     return iFileSize;
  }
 
  public void setUploadDirectory(String s){
     uploadDirectory = s;
  }

  public void setContentType(String s){
     ContentType = s;
     int j;
     if((j = ContentType.indexOf("boundary=")) != -1){
        ContentType = ContentType.substring(j + 9);
        ContentType = "--" + ContentType;
     }
  }
 
  public void setCharacterEncoding(String s){
     CharacterEncoding = s;
  }

  public void uploadFile( HttpServletRequest req) throws ServletException, IOException{
     setCharacterEncoding(req.getCharacterEncoding());
     setContentType(req.getContentType());
     uploadFile(req.getInputStream());
  }

  public void uploadFile( ServletInputStream servletinputstream) throws ServletException, IOException{
     String s5 = null;
     String filename = null;
     byte Linebyte[] = new byte[4096];
     byte outLinebyte[] = new byte[4096];
     int ai[] = new int[1];
     int ai1[] = new int[1];
     String line;
     //得到文件名
     while((line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null){
        int i = line.indexOf("filename=");
        if(i >= 0){
           line = line.substring(i + 10);
           if((i = line.indexOf("/"")) > 0)
              line = line.substring(0, i);
           break;
        }
     }
    
     filename = line;
    
     if(filename != null && !filename.equals("/"")){
        filename = getFileName(filename);
       
        String sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
        if(sContentType.indexOf("Content-Type") >= 0)
           readLine(Linebyte, ai, servletinputstream, CharacterEncoding);
          
        //File(String parent, String child)
        //Creates a new File instance from a parent pathname string
        //and a child pathname string.
       
        File file = new File(uploadDirectory, filename);
       
        //FileOutputStream(File file)
        //Creates a file output stream to write to the file represented
        //by the specified File object.
       
        FileOutputStream fileoutputstream = new FileOutputStream(file);
       
        while((sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null){
           if(sContentType.indexOf(ContentType) == 0 && Linebyte[0] == 45)
              break;
           if(s5 != null){
          
              //write(byte[] b, int off, int len)
              //Writes len bytes from the specified byte array starting
              //at offset off to this file output stream.
          
              fileoutputstream.write(outLinebyte, 0, ai1[0]);
              fileoutputstream.flush();
           }
           s5 = readLine(outLinebyte, ai1, servletinputstream, CharacterEncoding);
           if(s5 == null || s5.indexOf(ContentType) == 0 && outLinebyte[0] == 45)
              break;
           fileoutputstream.write(Linebyte, 0, ai[0]);
           fileoutputstream.flush();
        }
    
        byte byte0;
        if(newline.length() == 1)
           byte0 = 2;
        else
           byte0 = 1;
        if(s5 != null && outLinebyte[0] != 45 && ai1[0] > newline.length() * byte0)
           fileoutputstream.write(outLinebyte, 0, ai1[0] - newline.length() * byte0);
        if(sContentType != null && Linebyte[0] != 45 && ai[0] > newline.length() * byte0)
           fileoutputstream.write(Linebyte, 0, ai[0] - newline.length() * byte0);
       
        iFileSize = ffile.length();
        fileoutputstream.close();
     }
  }
 
  private String readLine(byte Linebyte[], int ai[], ServletInputStream servletinputstream, String CharacterEncoding){
     try{
        //readLine(byte[] buffer, int offset, int length)
        //Reads a line from the POST data.
        ai[0] = servletinputstream.readLine(Linebyte, 0, Linebyte.length);
        if(ai[0] == -1)
           return null;
     }catch(IOException _ex){
        return null;
     }
    
     try{
        if(CharacterEncoding == null){
           //用缺省的编码方式把给定的byte数组转换为字符串
           //String(byte[] bytes, int offset, int length)
           return new String(Linebyte, 0, ai[0]);
        }else{
           //用给定的编码方式把给定的byte数组转换为字符串
           //String(byte[] bytes, int offset, int length, String enc)
           return new String(Linebyte, 0, ai[0], CharacterEncoding);
        }
     }catch(Exception _ex){
        return null;
     }
  }
/*
public int readLine(byte[] buffer,
int offset,
int length) throws java.io.IOException
从POST来的数据中读一行
参数:
buffer - buffer to hold the line data
offset - offset into the buffer to start
length - maximum number of bytes to read.
Returns:
number of bytes read or -1 on the end of line.
*/
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值