前言
有一个奇怪的需求,就是将本地的内容直接提交到远程服务器,并且需要针对文件夹进行处理。所以,这里就直接采用JSch
来实现。在这里,感谢秀发浓密的程序猿的这篇博客,给了很大启发。
思路
既然是直接读取文件夹,我们就不考虑浏览器不能访问本地文件的问题了。直接就是Java
处理,然后直接读取文件提交服务器。
当然,介于上传过程中是Windows
上传到Linux
,如果只传图片倒还没什么问题,传文件可就造了老罪了。还好我现在只有图片需求。
但也并不能掉以轻心,因为,就算是图片,名字也是中文的。
所以直接用UUID
避免了上传乱码,等上传结束了再mv
到目标文件夹中。
上代码
private static final String TMPDIR = "/data/ftp";
public static void sshSftpUpload(String ip, String user, String psw, int port, String localDirFileName, String destDir, String fileName) throws Exception {
// 这些需要后期关闭的资源需要单独拉出来
// 而由于OutputStream与InputStream在初始化时需要单独Override其中的write方法
// 所以没办法直接用`try-catch-resource`语法糖给直接new出来
// 所以单独声明,就干脆全放一起了
Channel channel = null, channelShell = null;
Session session = null;
ChannelSftp sftp = null;
String tmpFileName = "";
OutputStream outStream = null;
InputStream inStream = null;
try {
JSch jsch = new JSch