sftp文件上传和读取

java中针对sftp服务器进行文件上传和读取的操作,代码如下:

public class SftpUploadAndReadFile{
	private ChannelSftp		sftpClient;
	private SFTPUtils		sftp				= new SFTPUtils();
	private final String	IP				= properties.getProperty("sftp.ip");		    // 服务器IP地址
	private final String	USERNAME			= properties.getProperty("sftp.username");	// 用户名
	private final String	USERPWD			= properties.getProperty("sftp.userpwd");	// 密码
	private final String	PORT				= properties.getProperty("sftp.port");		// 端口号
	
	public void uploadJob(){
		// 连接服务器
		sftpClient = sftp.connect(IP, Integer.parseInt(PORT), USERNAME, USERPWD);
		// 得到文件流
		FileInputStream fos = new FileInputStream(new File("E://output.xls"));
		HSSFWorkbook xls = new HSSFWorkbook(fos);
		// 输出流转为输入流,上传到ftp
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		xls.write(os);
		byte[] b = os.toByteArray();
		ByteArrayInputStream in = new ByteArrayInputStream(b);
		sftpClient.put(in, "/demo/xls/output.xls");
		// 关闭连接
		sftp.disconnect(sftpClient);
	}

	public void readJob(){
		// 连接服务器
		sftpClient = sftp.connect(IP, Integer.parseInt(PORT), USERNAME, USERPWD);
		// 得到该目录下所有文件
		Vector<LsEntry> ftpFiles = sftpClient.ls("/demo/xls");
		InputStream retrieveFileStream = null;
		if (ftpFiles != null && ftpFiles.size() > 0){
			for (LsEntry ftpFile : ftpFiles){
				if (ftpFile.getFilename().indexOf(".xls") != -1){
					// 得到输入流
					retrieveFileStream = sftpClient.get("/demo/xls/" + ftpFile.getFilename());
					// 得到excel文件
					HSSFWorkbook xls = new HSSFWorkbook(retrieveFileStream );
				}
			}
		}
		// 另外sftpClient还有另外一些常用的方法基本跟linux下的命令差不多,如下
		// sftpClient.rm(/demo/xls/output.xls); 删除文件
		// sftpClient.cd(/demo/xls/); 打开某个目录如果目录不存在会抛异常
		// sftpClient.mkdir(/demo/xls/); 创建目录
		// 关闭连接
		sftp.disconnect(sftpClient);
	}
}

以上基本为我们常用的操作。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
SFTP是Secure File Transfer Protocol的缩写,是一种安全的文件传输协议。下面是C语言实现SFTP上传文件的步骤: 1. 引入必要的头文件和库文件,包括libssh2库和WinSock2.h头文件。 2. 初始化socket库,使用initSocket()函数。 3. 建立SFTP连接,使用libssh2_session_init()函数初始化会话,使用libssh2_session_handshake()函数握手建立连接。 4. 认证用户身份,使用libssh2_userauth_password()函数或libssh2_userauth_publickey_fromfile()函数进行密码或公钥认证。 5. 打开本地文件,使用fopen()函数打开本地文件。 6. 创建远程文件,使用libssh2_sftp_open()函数创建远程文件。 7. 读取本地文件内容,使用fread()函数读取本地文件内容。 8. 将本地文件内容写入远程文件,使用libssh2_sftp_write()函数将本地文件内容写入远程文件。 9. 关闭本地文件和远程文件,使用fclose()函数和libssh2_sftp_close()函数。 10. 关闭SFTP连接,使用libssh2_session_disconnect()函数和libssh2_session_free()函数。 下面是一个简单的C语言实现SFTP上传文件代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <libssh2.h> #include <WinSock2.h> #define REMOTE_FILE_PATH "/path/to/remote/file" #define LOCAL_FILE_PATH "C:\\path\\to\\local\\file" int main() { int rc; int sock; struct sockaddr_in sin; const char *username = "username"; const char *password = "password"; const char *remote_file_path = REMOTE_FILE_PATH; const char *local_file_path = LOCAL_FILE_PATH; FILE *local_file; LIBSSH2_SESSION *session; LIBSSH2_SFTP *sftp_session; LIBSSH2_SFTP_HANDLE *sftp_handle; char buffer[1024]; size_t nread; size_t total = 0; // 初始化socket库 rc = WSAStartup(MAKEWORD(2, 2), &wsaData); if (rc != 0) { fprintf(stderr, "WSAStartup failed: %d\n", rc); return 1; } // 建立socket连接 sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == INVALID_SOCKET) { fprintf(stderr, "socket failed: %ld\n", WSAGetLastError()); WSACleanup(); return 1; } // 设置socket地址 sin.sin_family = AF_INET; sin.sin_port = htons(22); sin.sin_addr.s_addr = inet_addr("192.168.1.1"); // 连接远程主机 rc = connect(sock, (struct sockaddr*)(&sin), sizeof(struct sockaddr_in)); if (rc != 0) { fprintf(stderr, "connect failed: %d\n", WSAGetLastError()); closesocket(sock); WSACleanup(); return 1; } // 初始化会话 session = libssh2_session_init(); if (session == NULL) { fprintf(stderr, "libssh2_session_init failed\n"); closesocket(sock); WSACleanup(); return 1; } // 握手建立连接 rc = libssh2_session_handshake(session, sock); if (rc != 0) { fprintf(stderr, "libssh2_session_handshake failed: %d\n", rc); libssh2_session_free(session); closesocket(sock); WSACleanup(); return 1; } // 用户名密码认证 rc = libssh2_userauth_password(session, username, password); if (rc != 0) { fprintf(stderr, "libssh2_userauth_password failed: %d\n", rc); libssh2_session_disconnect(session, "Failed to authenticate"); libssh2_session_free(session); closesocket(sock); WSACleanup(); return 1; } // 创建SFTP会话 sftp_session = libssh2_sftp_init(session); if (sftp_session == NULL) { fprintf(stderr, "libssh2_sftp_init failed\n"); libssh2_session_disconnect(session, "Failed to create SFTP session"); libssh2_session_free(session); closesocket(sock); WSACleanup(); return 1; } // 打开本地文件 local_file = fopen(local_file_path, "rb"); if (local_file == NULL) { fprintf(stderr, "fopen failed: %s\n", strerror(errno)); libssh2_sftp_shutdown(sftp_session); libssh2_session_disconnect(session, "Failed to open local file"); libssh2_session_free(session); closesocket(sock); WSACleanup(); return 1; } // 创建远程文件 sftp_handle = libssh2_sftp_open(sftp_session, remote_file_path, LIBSSH2_FXF_WRITE|LIBSSH2_FXF_CREAT|LIBSSH2_FXF_TRUNC, LIBSSH2_SFTP_S_IRUSR|LIBSSH2_SFTP_S_IWUSR|LIBSSH2_SFTP_S_IRGRP|LIBSSH2_SFTP_S_IROTH); if (sftp_handle == NULL) { fprintf(stderr, "libssh2_sftp_open failed\n"); fclose(local_file); libssh2_sftp_shutdown(sftp_session); libssh2_session_disconnect(session, "Failed to create remote file"); libssh2_session_free(session); closesocket(sock); WSACleanup(); return 1; } // 读取本地文件内容并写入远程文件 do { nread = fread(buffer, 1, sizeof(buffer), local_file); if (nread <= 0) { break; } rc = libssh2_sftp_write(sftp_handle, buffer, nread); if (rc != nread) { fprintf(stderr, "libssh2_sftp_write failed: %d\n", rc); fclose(local_file); libssh2_sftp_close(sftp_handle); libssh2_sftp_shutdown(sftp_session); libssh2_session_disconnect(session, "Failed to write to remote file"); libssh2_session_free(session); closesocket(sock); WSACleanup(); return 1; } total += nread; } while (1); // 关闭本地文件和远程文件 fclose(local_file); libssh2_sftp_close(sftp_handle); libssh2_sftp_shutdown(sftp_session); // 关闭SFTP连接 libssh2_session_disconnect(session, "Normal shutdown"); libssh2_session_free(session); closesocket(sock); WSACleanup(); printf("Upload succeeded, %d bytes uploaded.\n", total); --相关问题--:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮生(FS)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值