⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileuploadthreadv2.java

📁 文件上传的java例子
💻 JAVA
字号:
package wjhk.jupload;/* * URLConnection instance given by the URL class openConnection() function * can't handle uploading of large files. * * The reason being? URLConnection only does a post to the server after the * getInputStream() function is called. So anything you write to the Output * Stream before the getInputStream() is called will be written to memory. * For large files this will caused the JVM to throw an Out of Memory exception. * * With the above reason I have decided to replace the use of URLConnection * with sockets. */import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStreamReader;import java.io.IOException;import java.net.Socket;import java.net.URL;import java.net.URLEncoder;import javax.swing.JProgressBar;public class FileUploadThreadV2 extends Thread {  //------------- INFORMATION --------------------------------------------  public static final String TITLE = "JUpload FileUploadThreadV2";  public static final String DESCRIPTION =      "Java Thread to upload files into a web server.";  public static final String AUTHOR = "William JinHua Kwong";  public static final double VERSION = 2.2;  public static final String LAST_MODIFIED = "15 April 2003";  //------------- VARIABLES ----------------------------------------------  // Files asked to be uploaded into the server.  private File[] files;  private String uploadURL;  // Progress Bar.  private JProgressBar progress;  private long totalFilesLength;  private long uploadedLength;  // Stopping the thread.  private boolean stop = false;  // Server Output.  private StringBuffer sb = new StringBuffer();  // Thread Exception.  private Exception e = null;  //------------- CONSTRUCTOR --------------------------------------------  public FileUploadThreadV2(File[] files, String uploadURL){    this.files = files;    this.uploadURL = uploadURL;    totalFilesLength = 0;    for(int i=0; i < this.files.length; i++){      totalFilesLength += this.files[i].length();    }  }  //------------- Public Functions ---------------------------------------  // Setting Progress Panel.  public void setProgressPanel(JProgressBar pgrBar){    progress = pgrBar;  }  // Stopping the Thread  public void stopUpload(){    this.stop = true;  }  // Server Output.  public StringBuffer getServerOutput(){    return sb;  }  // Exceptions  public Exception getException(){    return e;  }  //------------- Private Functions --------------------------------------  private StringBuffer getRandomString(){    StringBuffer sbRan = new StringBuffer(11);    StringBuffer alphaNum= new StringBuffer();    alphaNum.append("1234567890abcdefghijklmnopqrstuvwxyz");    int num;    for(int i = 0; i < 11; i++){      num = (int)(Math.random()* (alphaNum.length() - 1));      sbRan.append(alphaNum.charAt(num));    }    return sbRan;  }  private void uploadFileStream(File f, DataOutputStream dOut)                                throws FileNotFoundException,                                IOException{    byte[] byteBuff = null;    FileInputStream fis = null;    try{      int numBytes = 0;      byteBuff = new byte[1024];      fis = new FileInputStream(f);      while(-1 != (numBytes = fis.read(byteBuff)) && !stop){        dOut.write(byteBuff, 0, numBytes);        uploadedLength += numBytes;        if(null != progress) progress.setValue((int)uploadedLength);      }    }finally{      try{        fis.close();      }catch(Exception e){}      byteBuff = null;    }  }  private void addServerOutPut(String s){    if(0 < sb.length() || !s.equals("")){      sb.append(s);    }  }  private StringBuffer[] setAllHead(File[] fileA, StringBuffer bound){    StringBuffer[] sbArray = new StringBuffer[fileA.length];    File file;    StringBuffer sb;    for(int i=0; i < fileA.length; i++){        file = fileA[i];        sbArray[i] = new StringBuffer();        sb = sbArray[i];        // Line 1.        sb.append(bound.toString());sb.append("\r\n");        // Line 2.        sb.append("Content-Disposition: form-data; name=\"File");sb.append(i);        sb.append("\"; filename=\"");sb.append(file.toString());        sb.append("\"");sb.append("\r\n");        // Line 3 & Empty Line 4.        sb.append("Content-Type: application/octet-stream");        sb.append("\r\n");sb.append("\r\n");    }    return sbArray;  }  private StringBuffer[] setAllTail(int fileLength, StringBuffer bound){    StringBuffer[] sbArray = new StringBuffer[fileLength];    for(int i=0; i < fileLength; i++){      sbArray[i] = new StringBuffer("\r\n");    }    // Telling the Server we have Finished.    sbArray[sbArray.length-1].append(bound.toString());    sbArray[sbArray.length-1].append("--\r\n");    return sbArray;  }  //------------- THE HEART OF THE PROGRAME ------------------------------  private void setHeader(){  }  public void run() {    Socket sock = null;    DataOutputStream dataout = null;    BufferedReader datain = null;    try{      URL url = new URL(uploadURL);      StringBuffer boundary = new StringBuffer();      boundary.append("-----------------------------");      boundary.append(getRandomString().toString());      long contentLength = totalFilesLength;      StringBuffer[] head = setAllHead(files, boundary);      StringBuffer[] tail = setAllTail(files.length, boundary);      for(int i = 0; i < files.length; i++){        contentLength += head[i].length();        contentLength += tail[i].length();      }      StringBuffer header = new StringBuffer();      // Header: Request line      header.append("POST ");header.append(url.getPath());      if(null != url.getQuery() && !"".equals(url.getQuery())){        header.append("?");header.append(url.getQuery());      }      header.append(" HTTP/1.1\r\n");      // Header: General      header.append("Host: ");      header.append(url.getHost());header.append("\r\n");      //header.append("Accept: */*\r\n");      // Header: Request      //header.append("User-Agent: Mozilla/4.0\r\n");      // Header: Entity      header.append("Content-type: multipart/form-data; boundary=");      header.append(boundary.substring(2, boundary.length()) +"\r\n");      header.append("Content-length: ");      header.append(contentLength);header.append("\r\n");      // Blank line      header.append("\r\n");      // If port not specified then use default http port 80.      sock = new Socket(url.getHost(), (-1 == url.getPort())?80:url.getPort());      dataout = new DataOutputStream(new BufferedOutputStream(sock.getOutputStream()));      datain  = new BufferedReader(new InputStreamReader(sock.getInputStream()));      //DataInputStream datain  = new DataInputStream(new BufferedInputStream(sock.getInputStream()));      // Send http request to server      uploadedLength = 0;      if(null != progress) progress.setMaximum((int)totalFilesLength);      dataout.writeBytes(header.toString());      for(int i=0; i < files.length && !stop; i++){        // Write to Server the head(4 Lines), a File and the tail.        dataout.writeBytes(head[i].toString());        uploadFileStream(files[i],dataout);        dataout.writeBytes(tail[i].toString());      }      dataout.flush ();      if(!stop && (null != progress))        progress.setString("File(s) uploaded. Wait for server response!");      String line;      while ((line = datain.readLine()) != null) {        this.addServerOutPut(line + "\n");      }    }catch(Exception e){      this.e = e;    }finally{      try{        // Throws java.io.IOException        dataout.close();      } catch(Exception e){}      dataout = null;      try{        // Throws java.io.IOException        datain.close();      } catch(Exception e){}      datain = null;      try{        // Throws java.io.IOException        sock.close();      } catch(Exception e){}      sock = null;    }  }  //------------- CLEAN UP -----------------------------------------------  public void close(){    files = null;    e = null;    sb = null;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -