Springboot實現(xiàn)文件上傳至linux指定目錄
本篇文章講述一個springboot項目如何實現(xiàn)一個文件上傳接口,涉及vsftpd服務(wù)、SSH協(xié)議以及對linux系統(tǒng)的一些配置。
一、springboot工程部分
本篇文章略過springboot創(chuàng)建過程,具體見之前發(fā)過的文章
1.1在pom.xml中添加SFTP(SSH 文件傳輸協(xié)議)的依賴(請注意你的版本號,下面不在贅述)
jsch 是一個用Java編寫的SSH2協(xié)議庫,它可以用來實現(xiàn)SFTP客戶端和服務(wù)器端的功能。
<!-- 添加sftp依賴-->
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>1.2application.yml配置文件
sftp_ubantu: host: 192.168.000.000 //你的linux的ip port: 22 //端口號 username: root //用戶名 password: ********* remoteDir: /XXXX/XXXX/XXXX //指定文件路徑
1.3SFTP工具類
import com.jcraft.jsch.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.InputStream;
@Component
public class SFTPUtil {
private static String host;
@Value("${sftp_ubantu.host}")
public void setHost(String host) {
SFTPUtil.host = host;
}
private static Integer port;
@Value("${sftp_ubantu.port}")
public void setPort(Integer port) {
SFTPUtil.port = port;
}
private static String username;
@Value("${sftp_ubantu.username}")
public void setUsername(String username) {
SFTPUtil.username = username;
}
private static String password;
@Value("${sftp_ubantu.password}")
public void setPassword(String password) {
SFTPUtil.password = password;
}
private static String remoteDir;
@Value("${sftp_ubantu.remoteDir}")
public void setRemoteDir(String remoteDir) {
SFTPUtil.remoteDir = remoteDir;
}
public static void uploadFile(InputStream inputStream, String fileName) throws IOException, JSchException, SftpException {
// TODO Auto-generated method stub
Session session = null;
Channel channel = null;
JSch jsch = new JSch();
try {
//創(chuàng)建會話
session = jsch.getSession(username, host, port != null ? port : 22);
//設(shè)置密碼
//設(shè)置密碼
session.setPassword(password);
//設(shè)置第一次登陸的時候提示,可選值:(ask | yes | no)
session.setConfig("StrictHostKeyChecking", "no");
//設(shè)置連接超時時間
session.connect(30000);
//創(chuàng)建sftp通信通道
channel = session.openChannel("sftp");
channel.connect(1000);
//創(chuàng)建sftp客戶端
ChannelSftp sftp = (ChannelSftp) channel;
//進入遠程目錄
sftp.cd(remoteDir);
//上傳文件
sftp.put(inputStream, fileName);
inputStream.close();
} finally {
//關(guān)流操作
if (session != null) {
session.disconnect();
}
if (channel != null) {
channel.disconnect();
}
}
}
}
1.4接口代碼
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.SftpException;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
@RestController
@RequestMapping("/test")
public class FileController {
//上傳文件
@PostMapping("/upload")
public Result uploadFile(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return Result.error("文件為空,請重新上傳文件");
}
InputStream inputStream = null;
try {
inputStream = file.getInputStream();
SFTPUtil.uploadFile(inputStream, file.getOriginalFilename());
return Result.success("文件上傳成功");
} catch (IOException | JSchException | SftpException e) {
return Result.error("文件上傳失敗"+e.getMessage());
}finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
二、Linux系統(tǒng)中的相關(guān)配置
2.1 配置虛擬機網(wǎng)絡(luò)
首先將虛擬機的網(wǎng)絡(luò)進行配置,選用橋接模式,使得虛擬機與本機在同一字段

如果不是橋接模式則依次點擊虛擬機----->設(shè)置 或者按CTRL+D喚出虛擬機設(shè)置

2.2ubuntu安裝sftp服務(wù)器
更新系統(tǒng)包確保系統(tǒng)包是最新的。打開終端運行下面的命令
sudo apt update sudo apt upgrade -y
使用apt包管理器安裝vsftpd。
sudo apt install vsftpd
檢查vsftpd服務(wù)是否正在運行:
sudo systemctl status vsftpd
2.3配置vsftp服務(wù)器
要配置vsftpd服務(wù)器以允許root用戶和普通用戶上傳文件和創(chuàng)建文件夾
打開終端。
使用文本編輯器編輯vsftpd配置文件。例如,使用vim或vi
sudo vim /etc/vsftpd.conf
在配置文件中找到以下幾個被注釋的命令行,按i鍵切換至插入模式,刪掉#取消注釋
//允許寫命令 write_enable=YES //允許上傳 upload_enable=YES
按shift+:進入命令模式,輸入wq存盤退出
當配置文件發(fā)送改動的時候需要重啟vsftpd服務(wù)器
sudo systemctl resatrt vsftpd
2.4安裝OpenSSH服務(wù)器
OpenSSH 是一個廣泛使用的 SSH 服務(wù)器實現(xiàn),它默認支持 SFTP,運行下面命令。
sudo apt install openssh-server -y
安裝完成后,OpenSSH 服務(wù)器會自動啟動并設(shè)置為開機自啟。您可以使用以下命令檢查 SSH 服務(wù)的狀態(tài):
sudo systemctl status ssh
如果服務(wù)沒有運行,可以使用以下命令手動啟動它:
sudo systemctl start ssh
配置防火墻
開放你要請求的端口,一般vsftp是22端口
sudo ufw allow 22/tcp
通過以上步驟應(yīng)該就可以實現(xiàn)vsftp文件上傳了
到此這篇關(guān)于Springboot實現(xiàn)文件上傳至linux指定目錄的文章就介紹到這了,更多相關(guān)Springboot文件上傳指定目錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
操作系統(tǒng)的內(nèi)核態(tài)和用戶態(tài)場景詳解
這篇文章主要介紹了操作系統(tǒng)的內(nèi)核態(tài)和用戶態(tài)場景,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-06-06
DynamicDataSource怎樣解決多數(shù)據(jù)源的事務(wù)問題
這篇文章主要介紹了DynamicDataSource怎樣解決多數(shù)據(jù)源的事務(wù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
java?面向?qū)ο蟠a塊及不同位置對屬性賦值的執(zhí)行順序
這篇文章主要介紹了java面向?qū)ο蟠a塊及不同位置對屬性賦值的執(zhí)行順序,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
Java讀寫鎖ReadWriteLock的創(chuàng)建使用及測試分析示例詳解
這篇文章主要為大家介紹了Java讀寫鎖ReadWriteLock的創(chuàng)建使用及測試分析示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01

