使用jsch库来建立一个SSH连接,然后通过该连接执行Linux命令来上传文件。
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version> <!--或者你项目中的最新版本-->
</dependency>
import com.jcraft.jsch.*;
import java.io.*;
public class FileUploader {
public static void main(String[] args) {
String localFilePath = "C:\\path\\to\\your\\local\\file.txt"; // 本地文件路径
//文件路径必须用/,不然上传的文件路径识别不了
String remoteFilePath = "/path/to/destination/file.txt"; // 远程Linux文件路径
String remoteHost = "your_remote_host"; // 远程Linux主机地址
String username = "your_username"; // 远程Linux用户名
String password = "your_password"; // 远程Linux用户密码
JSch jsch = new JSch();
Session session = null;
try {
// 建立SSH连接
session = jsch.getSession(username, remoteHost, 22);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(password);
session.connect();
// 打开SFTP通道
ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
// 上传文件 可以在上传之前检查文件是否存在/或者实现文件覆盖
File localFile = new File(localFilePath);
InputStream inputStream = new FileInputStream(localFile);
// channelSftp.lstat(remoteFilePath); // 检查远程文件是否存在,不存在时,它会抛出SftpException异常
channelSftp.put(inputStream, remoteFilePath, ChannelSftp.OVERWRITE);
System.out.println("File uploaded successfully.");
// 关闭连接
channelSftp.disconnect();
session.disconnect();
} catch (JSchException | SftpException | FileNotFoundException e) {
e.printStackTrace();
}
}
}
访问的文件位于/var/www/uploads目录下
http://your_domain.com/uploads/your_uploaded_file.txt就能访问/var/www/uploads/your_uploaded_file.txt的文件
server {
listen 80;
server_name your_domain.com;
location /uploads {
alias /var/www/uploads;
# 这里的alias路径应该与上传文件的实际存储路径相对应
# 如果是相对路径,需要确保Nginx对该路径有访问权限
autoindex on; # 如果需要列出目录内容
allow 192.168.1.1; # 允许特定IP地址访问
allow 10.0.0.0/24; # 允许特定IP段访问
deny all; # 默认拒绝其他所有IP地址访问
}
# 其他的Nginx配置...
}