Springboot實(shí)現(xiàn)文件上傳至linux指定目錄
本篇文章講述一個(gè)springboot項(xiàng)目如何實(shí)現(xiàn)一個(gè)文件上傳接口,涉及vsftpd服務(wù)、SSH協(xié)議以及對(duì)linux系統(tǒng)的一些配置。
一、springboot工程部分
本篇文章略過springboot創(chuàng)建過程,具體見之前發(fā)過的文章
1.1在pom.xml中添加SFTP(SSH 文件傳輸協(xié)議)的依賴(請(qǐng)注意你的版本號(hào),下面不在贅述)
jsch 是一個(gè)用Java編寫的SSH2協(xié)議庫,它可以用來實(shí)現(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 //端口號(hào) 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)建會(huì)話
session = jsch.getSession(username, host, port != null ? port : 22);
//設(shè)置密碼
//設(shè)置密碼
session.setPassword(password);
//設(shè)置第一次登陸的時(shí)候提示,可選值:(ask | yes | no)
session.setConfig("StrictHostKeyChecking", "no");
//設(shè)置連接超時(shí)時(shí)間
session.connect(30000);
//創(chuàng)建sftp通信通道
channel = session.openChannel("sftp");
channel.connect(1000);
//創(chuàng)建sftp客戶端
ChannelSftp sftp = (ChannelSftp) channel;
//進(jìn)入遠(yuǎn)程目錄
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("文件為空,請(qǐng)重新上傳文件");
}
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 配置虛擬機(jī)網(wǎng)絡(luò)
首先將虛擬機(jī)的網(wǎng)絡(luò)進(jìn)行配置,選用橋接模式,使得虛擬機(jī)與本機(jī)在同一字段

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

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

