我用FTPClient做了个图片上传,但图片经常上传不完整,有时只上传一半上去,有时就上传了个空图片
/*
 * 上传文件
 */
public void upFile(InputStream in, String path, String saveFileName,
int fileSize) { try {
FtpClient ftpClient = new FtpClient(host, 21); // 创建FTP服务类
ftpClient.login(username, password); // 登录FTP服务器
ftpClient.cd(path); // 图片目标目录
ftpClient.binary();
TelnetOutputStream telOut = ftpClient.put(saveFileName);
DataOutputStream out = new DataOutputStream(telOut);
byte[] b = new byte[fileSize];
int temp;
while ((temp = in.read(b)) != -1) {
out.write(b, 0, temp);
}
in.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
请各位高手帮个忙啊

解决方案 »

  1.   

    package nc.ui.doc.doc_007; import java.io.File; 
    import java.io.FileInputStream; 
    import java.io.FileOutputStream; 
    import java.io.IOException; import nc.itf.doc.DocDelegator; 
    import nc.vo.doc.doc_007.DirVO; 
    import nc.vo.pub.BusinessException; 
    import nc.vo.pub.SuperVO; import org.apache.commons.net.ftp.FTPClient; 
    import org.apache.commons.net.ftp.FTPFile; 
    import org.apache.commons.net.ftp.FTPReply; 
    import org.apache.commons.net.ftp.FTP; 
    public class FtpTool { 
    private FTPClient ftp; private String romateDir = ""; private String userName = ""; private String password = ""; private String host = ""; private String port = "21"; public FtpTool(String url) throws IOException { 
    //String url="ftp://user:password@ip:port/ftptest/psd"; 
    int len = url.indexOf("//"); 
    String strTemp = url.substring(len + 2); 
    len = strTemp.indexOf(":"); 
    userName = strTemp.substring(0, len); 
    strTemp = strTemp.substring(len + 1); len = strTemp.indexOf("@"); 
    password = strTemp.substring(0, len); 
    strTemp = strTemp.substring(len + 1); 
    host = ""; 
    len = strTemp.indexOf(":"); 
    if (len < 0)//没有设置端口 

    port = "21"; 
    len = strTemp.indexOf("/"); 
    if (len > -1) { 
    host = strTemp.substring(0, len); 
    strTemp = strTemp.substring(len + 1); 
    } else { 
    strTemp = ""; 

    } else { 
    host = strTemp.substring(0, len); 
    strTemp = strTemp.substring(len + 1); 
    len = strTemp.indexOf("/"); 
    if (len > -1) { 
    port = strTemp.substring(0, len); 
    strTemp = strTemp.substring(len + 1); 
    } else { 
    port = "21"; 
    strTemp = ""; 


    romateDir = strTemp; 
    ftp = new FTPClient(); 
    ftp.connect(host, FormatStringToInt(port)); } public FtpTool(String host, int port) throws IOException { 
    ftp = new FTPClient(); 
    ftp.connect(host, port); 
    } public String login(String username, String password) throws IOException { 
    this.ftp.login(username, password); 
    return this.ftp.getReplyString(); 
    } public String login() throws IOException { 
    this.ftp.login(userName, password); 
    System.out.println("ftp用户: " + userName); 
    System.out.println("ftp密码: " + password); 
    if (!romateDir.equals("")) 
    System.out.println("cd " + romateDir); 
    ftp.changeWorkingDirectory(romateDir); 
    return this.ftp.getReplyString(); 
    } public boolean upload(String pathname, String filename) throws IOException, BusinessException { int reply; 
    int j; 
    String m_sfilename = null; 
    filename = CheckNullString(filename); 
    if (filename.equals("")) 
    return false; 
    reply = ftp.getReplyCode(); 
    if (!FTPReply.isPositiveCompletion(reply)) { 
    ftp.disconnect(); 
    System.out.println("FTP server refused connection."); 
    System.exit(1); 

    FileInputStream is = null; 
    try { 
    File file_in; 
    if (pathname.endsWith(File.separator)) { 
    file_in = new File(pathname + filename); 
    } else { 
    file_in = new File(pathname + File.separator + filename); 

    if (file_in.length() == 0) { 
    System.out.println("上传文件为空!"); 
    return false; 
    }  
        //产生随机数最大到99  
        j = (int)(Math.random()*100); 
        m_sfilename = String.valueOf(j) + ".pdf"; // 生成的文件名 
    is = new FileInputStream(file_in); 
    ftp.setFileType(FTP.BINARY_FILE_TYPE); 
    ftp.storeFile(m_sfilename, is); 
    ftp.logout(); 
    } finally { 
    if (is != null) { 
    is.close(); 


    System.out.println("上传文件成功!"); 
    return true; 

    public boolean delete(String filename) throws IOException { FileInputStream is = null; 
    boolean retValue = false; 
    try { 
    retValue = ftp.deleteFile(filename); 
    ftp.logout(); 
    } finally { 
    if (is != null) { 
    is.close(); 


    return retValue; } public void close() { 
    if (ftp.isConnected()) { 
    try { 
    ftp.disconnect(); 
    } catch (IOException e) { 
    e.printStackTrace(); 


    } public static int FormatStringToInt(String p_String) { 
    int intRe = 0; 
    if (p_String != null) { 
    if (!p_String.trim().equals("")) { 
    try { 
    intRe = Integer.parseInt(p_String); 
    } catch (Exception ex) { } 


    return intRe; 
    } public static String CheckNullString(String p_String) { 
    if (p_String == null) 
    return ""; 
    else 
    return p_String; 
    } public boolean downfile(String pathname, String filename) { String outputFileName = null; 
    boolean retValue = false; 
    try { 
    FTPFile files[] = ftp.listFiles(); 
    int reply = ftp.getReplyCode(); //////////////////////////////////////////////// 
    if (!FTPReply.isPositiveCompletion(reply)) { 
    try { 
    throw new Exception("Unable to get list of files to dowload."); 
    } catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 

    } ///////////////////////////////////////////////////// 
    if (files.length == 0) { 
    System.out.println("No files are available for download."); 
    }else { 
    for (int i=0; i <files.length; i++) { 
    System.out.println("Downloading file "+files[i].getName()+"Size:"+files[i].getSize()); 
    outputFileName = pathname + filename + ".pdf"; 
    //return outputFileName; 
    File f = new File(outputFileName); ////////////////////////////////////////////////////// 
    retValue = ftp.retrieveFile(outputFileName, new FileOutputStream(f)); if (!retValue) { 
    try { 
    throw new Exception ("Downloading of remote file"+files[i].getName()+" failed. ftp.retrieveFile() returned false."); 
    } catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 

    } } 
    } ///////////////////////////////////////////////////////////// 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 

    return retValue; 
    } } 
    试试这个