2009-10-14 41 views
0

有人可以指向一些可以通过FTP上传文件的java代码。重要的是,如果FTP响应一个错误消息,我需要获得它。这是因为我需要确保文件已成功上传。FTP上传代码,返回来自服务器的任何错误响应

我正在使用以下代码,但如果上载失败,它不会返回错误。

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 

/** 
* This class is used to upload a file to a FTP server. 
* 
* @author Muthu 
*/ 
public class FileUpload 
{ 

    /** 
    * Upload a file to a FTP server. A FTP URL is generated with the 
    * following syntax: 
    * ftp://user:[email protected]:port/filePath;type=i. 
    * 
    * @param ftpServer , FTP server address (optional port ':portNumber'). 
    * @param user , Optional user name to login. 
    * @param password , Optional password for user. 
    * @param fileName , Destination file name on FTP server (with optional 
    *   preceding relative path, e.g. "myDir/myFile.txt"). 
    * @param source , Source file to upload. 
* @throws Exception 
    */ 
    public void upload(String ftpServer, String user, String password, 
     String fileName, File source) throws Exception 
    { 
     if (ftpServer != null && fileName != null && source != null) 
     { 
     StringBuffer sb = new StringBuffer("ftp://"); 
     // check for authentication else assume its anonymous access. 
     if (user != null && password != null) 
     { 
      sb.append(user); 
      sb.append(':'); 
      sb.append(password); 
      sb.append('@'); 
     } 
     sb.append(ftpServer); 
     sb.append('/'); 
     sb.append(fileName); 
     /* 
      * type ==> a=ASCII mode, i=image (binary) mode, d= file directory 
      * listing 
      */ 
     sb.append(";type=i"); 

     BufferedInputStream bis = null; 
     BufferedOutputStream bos = null; 
     try 
     { 
      URL url = new URL(sb.toString()); 
      URLConnection urlc = url.openConnection(); 

      bos = new BufferedOutputStream(urlc.getOutputStream()); 
      bis = new BufferedInputStream(new FileInputStream(source)); 

      int i; 
      // read byte by byte until end of stream 
      while ((i = bis.read()) != -1) 
      { 
       bos.write(i); 
      } 
     } catch (Exception e){ 
      System.out.println("error during file upload"); 
      throw e; 
     } 
     finally 
     { 
      if (bis != null) 
       try 
       { 
        bis.close(); 
       } 
       catch (IOException ioe) 
       { 
        ioe.printStackTrace(); 
       } 
      if (bos != null) 
       try 
       { 
        bos.close(); 
       } 
       catch (IOException ioe) 
       { 
        ioe.printStackTrace(); 
       } 
     } 
     } 
     else 
     { 
     System.out.println("Input not available."); 
     } 
    } 



     /** 
     * Download a file from a FTP server. A FTP URL is generated with the 
     * following syntax: 
     * ftp://user:[email protected]:port/filePath;type=i. 
     * 
     * @param ftpServer , FTP server address (optional port ':portNumber'). 
     * @param user , Optional user name to login. 
     * @param password , Optional password for user. 
     * @param fileName , Name of file to download (with optional preceeding 
     *   relative path, e.g. one/two/three.txt). 
     * @param destination , Destination file to save. 
     * @throws MalformedURLException, IOException on error. 
     */ 
     public void download(String ftpServer, String user, String password, 
      String fileName, File destination) throws MalformedURLException, 
      IOException 
     { 
      if (ftpServer != null && fileName != null && destination != null) 
      { 
      StringBuffer sb = new StringBuffer("ftp://"); 
      // check for authentication else assume its anonymous access. 
      if (user != null && password != null) 
      { 
       sb.append(user); 
       sb.append(':'); 
       sb.append(password); 
       sb.append('@'); 
      } 
      sb.append(ftpServer); 
      sb.append('/'); 
      sb.append(fileName); 
      /* 
       * type ==> a=ASCII mode, i=image (binary) mode, d= file directory 
       * listing 
       */ 
      sb.append(";type=i"); 
     BufferedInputStream bis = null; 
     BufferedOutputStream bos = null; 
     try 
     { 
      URL url = new URL(sb.toString()); 
      URLConnection urlc = url.openConnection(); 

      bis = new BufferedInputStream(urlc.getInputStream()); 
      bos = new BufferedOutputStream(new FileOutputStream(
        destination.getName())); 

      int i; 
      while ((i = bis.read()) != -1) 
      { 
       bos.write(i); 
      } 
     } 
     finally 
     { 
      if (bis != null) 
       try 
       { 
        bis.close(); 
       } 
       catch (IOException ioe) 
       { 
        ioe.printStackTrace(); 
       } 
      if (bos != null) 
       try 
       { 
        bos.close(); 
       } 
       catch (IOException ioe) 
       { 
        ioe.printStackTrace(); 
       } 
     } 
     } 
     else 
     { 
     System.out.println("Input not available"); 
     } 
    } 
} 

任何帮助将不胜感激。

谢谢。

回答

相关问题