JAVA使用FTPS上传文件
- JAVA使用FTPS上传文件
JAVA使用FTPS上传文件
使用jar包
commons-net-3.1.jar
pom自行处理
package com.jinhui.jhrobotcon.threadc;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTPSClient;
public class FtpsDemo {
/** 本地字符编码 */
private static String LOCAL_CHARSET = "GBK";
// FTP协议文件名编码为iso-8859-1
private static String SERVER_CHARSET = "ISO-8859-1";
public static void main(String[] args) throws NoSuchAlgorithmException {
String path = "D://device_model_10.xml";
String fileName = "device_model_10.xml";
File file = new File(path);
try {
FTPSClient ftpsClient = new FTPSClient();
FileInputStream fis = new FileInputStream(file);
System.out.println(fis.toString());
ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
byte[] b = new byte[1000];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
byte[] data = bos.toByteArray();
bos.close();
ftpsClient.connect("127.0.0.1", 12);
ftpsClient.login("admin","admin");//FTP的用户名和密码
// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
if (FTPReply.isPositiveCompletion(ftpsClient.sendCommand(
"OPTS UTF8", "ON"))) {
LOCAL_CHARSET = "UTF-8";
}
ftpsClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpsClient.setControlEncoding(LOCAL_CHARSET);
ftpsClient.execPBSZ(0);
ftpsClient.execPROT("P");
ftpsClient.enterLocalPassiveMode();
// 上传文件名编码转换
fileName = new String(fileName.getBytes(LOCAL_CHARSET),SERVER_CHARSET);
InputStream is = new ByteArrayInputStream(data);
//改变文件路径
//ftpsClient.changeWorkingDirectory("/Termid/Model");
if (ftpsClient.storeFile(fileName, is)) {
} else {
System.out.println("失败");
}
ftpsClient.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
实际上,如果使用的文件内容能直接拿到byte的话, 可以直接上传
像这样
String content=“待上传数据”;
InputStream is = new ByteArrayInputStream(content.getBytes());