您的位置:首页 > 编程语言 > Java开发

java FTP方式上传文件到图片服务器

2016-06-08 14:24 579 查看
因为图片很多,所以无法,在网上搜了一种方式:1.FTPClient 经过测试然而并不理想,报了一个错:org.apache.commons.net.MalformedServerReplyException: Could not parse response code. Server Reply: SSH-2.0-OpenSSH_4.3org.apache.commons.net.MalformedServerReplyException: Could
not parse response code. Server Reply: SSH-2.0-OpenSSH_4.3

import java.io.File;

import java.io.FileInputStream;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPReply;

public class FTPUpload {

    private FTPClient ftp;

    private String path;

    private String addr;

    private int port;

    private String userName;

    private String pwd;

    public FTPUpload(){

        this.path="/home/samba";

        this.addr="121.40.172.1";

        this.port=22;

        this.userName="root";

        this.pwd="86b63949";

        try {

            connect();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    /**

     *

     * @param path

     *            上传到ftp服务器哪个路径下

     * @param addr

     *            地址

     * @param port

     *            端口号

     * @param username

     *            用户名

     * @param password

     *            密码

     * @return

     * @throws Exception

     */

    private boolean connect() throws Exception {

        boolean result = false;

        ftp = new FTPClient();

        int reply;

        ftp.connect(addr, port);

        ftp.login(userName, pwd);

        ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

        reply = ftp.getReplyCode();

        if (!FTPReply.isPositiveCompletion(reply)) {

            ftp.disconnect();

            return result;

        }

        ftp.changeWorkingDirectory(path);

        result = true;

        return result;

    }

    /**

     *

     * @param file

     *            上传的文件或文件夹

     * @throws Exception

     */

    private void upload(File file) throws Exception {

        if (file.isDirectory()) {

            ftp.makeDirectory(file.getName());

            ftp.changeWorkingDirectory(file.getName());

            String[] files = file.list();

            for (int i = 0; i < files.length; i++) {

                File file1 = new File(file.getPath() + "\\" + files[i]);

                if (file1.isDirectory()) {

                    upload(file1);

                    ftp.changeToParentDirectory();

                } else {

                    File file2 = new File(file.getPath() + "\\" + files[i]);

                    FileInputStream input = new FileInputStream(file2);

                    ftp.storeFile(file2.getName(), input);

                    input.close();

                }

            }

        } else {

            File file2 = new File(file.getPath());

            FileInputStream input = new FileInputStream(file2);

            ftp.storeFile(file2.getName(), input);

            input.close();

        }

    }

    public static void main(String[] args) throws Exception {

        FTPUpload t = new FTPUpload();

        File file = new File("/Users/xxx/Downloads/1.doc");

        t.upload(file);

    }

}

最后在网上搜,找到原因了。如果服务器是sftp方式,那么不能使用FTPClient连接了,需要使用另外一段代码

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.util.Properties;

import java.util.Vector;

import com.jcraft.jsch.Channel;

import com.jcraft.jsch.ChannelSftp;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.Session;

import com.jcraft.jsch.SftpException;

public class MySFTP {

/**

* 连接sftp服务器

* @param host 主机

* @param port 端口

* @param username 用户名

* @param password 密码

* @return

*/

public ChannelSftp connect(String host, int port, String username,

String password) {

ChannelSftp sftp = null;

try {

JSch jsch = new JSch();

jsch.getSession(username, host, port);

Session sshSession = jsch.getSession(username, host, port);

System.out.println("Session created.");

sshSession.setPassword(password);

Properties sshConfig = new Properties();

sshConfig.put("StrictHostKeyChecking", "no");

sshSession.setConfig(sshConfig);

sshSession.connect();

System.out.println("Session connected.");

System.out.println("Opening Channel.");

Channel channel = sshSession.openChannel("sftp");

channel.connect();

sftp = (ChannelSftp) channel;

System.out.println("Connected to " + host + ".");

} catch (Exception e) {

}

return sftp;

}

/**

* 上传文件

* @param directory 上传的目录

* @param uploadFile 要上传的文件

* @param sftp

*/

public void upload(String directory, String uploadFile, ChannelSftp sftp) {

try {

sftp.cd(directory);

File file=new File(uploadFile);

sftp.put(new FileInputStream(file), file.getName());

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 下载文件

* @param directory 下载目录

* @param downloadFile 下载的文件

* @param saveFile 存在本地的路径

* @param sftp

*/

public void download(String directory, String downloadFile,String saveFile, ChannelSftp sftp) {

try {

sftp.cd(directory);

File file=new File(saveFile);

sftp.get(downloadFile, new FileOutputStream(file));

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 删除文件

* @param directory 要删除文件所在目录

* @param deleteFile 要删除的文件

* @param sftp

*/

public void delete(String directory, String deleteFile, ChannelSftp sftp) {

try {

sftp.cd(directory);

sftp.rm(deleteFile);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 列出目录下的文件

* @param directory 要列出的目录

* @param sftp

* @return

* @throws SftpException

*/

public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException{

return sftp.ls(directory);

}

public static void main(String[] args) {

MySFTP sf = new MySFTP();

String host = "192.168.0.1";

int port = 22;

String username = "root";

String password = "root";

String directory = "/home/httpd/test/";

String uploadFile = "D:\\tmp\\upload.txt";

String downloadFile = "upload.txt";

String saveFile = "D:\\tmp\\download.txt";

String deleteFile = "delete.txt";

ChannelSftp sftp=sf.connect(host, port, username, password);

sf.upload(directory, uploadFile, sftp);

sf.download(directory, downloadFile, saveFile, sftp);

sf.delete(directory, deleteFile, sftp);

try{

sftp.cd(directory);

sftp.mkdir("ss");

System.out.println("finished");

}catch(Exception e){

e.printStackTrace();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息