本篇文章讲述一个springboot项目如何实现一个文件上传接口,涉及vsftpd服务、ssh协议以及对linux系统的一些配置。
一、springboot工程部分
本篇文章略过springboot创建过程,具体见之前发过的文章
1.1在pom.xml中添加sftp(ssh 文件传输协议)的依赖(请注意你的版本号,下面不在赘述)
jsch 是一个用java编写的ssh2协议库,它可以用来实现sftp客户端和服务器端的功能。
<!-- 添加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 {
//创建会话
session = jsch.getsession(username, host, port != null ? port : 22);
//设置密码
//设置密码
session.setpassword(password);
//设置第一次登陆的时候提示,可选值:(ask | yes | no)
session.setconfig("stricthostkeychecking", "no");
//设置连接超时时间
session.connect(30000);
//创建sftp通信通道
channel = session.openchannel("sftp");
channel.connect(1000);
//创建sftp客户端
channelsftp sftp = (channelsftp) channel;
//进入远程目录
sftp.cd(remotedir);
//上传文件
sftp.put(inputstream, filename);
inputstream.close();
} finally {
//关流操作
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系统中的相关配置
2.1 配置虚拟机网络
首先将虚拟机的网络进行配置,选用桥接模式,使得虚拟机与本机在同一字段

如果不是桥接模式则依次点击虚拟机----->设置 或者按ctrl+d唤出虚拟机设置

2.2ubuntu安装sftp服务器
更新系统包确保系统包是最新的。打开终端运行下面的命令
sudo apt update sudo apt upgrade -y
使用apt包管理器安装vsftpd。
sudo apt install vsftpd
检查vsftpd服务是否正在运行:
sudo systemctl status vsftpd
2.3配置vsftp服务器
要配置vsftpd服务器以允许root用户和普通用户上传文件和创建文件夹
打开终端。
使用文本编辑器编辑vsftpd配置文件。例如,使用vim或vi
sudo vim /etc/vsftpd.conf
在配置文件中找到以下几个被注释的命令行,按i键切换至插入模式,删掉#取消注释
//允许写命令 write_enable=yes //允许上传 upload_enable=yes
按shift+:进入命令模式,输入wq存盘退出
当配置文件发送改动的时候需要重启vsftpd服务器
sudo systemctl resatrt vsftpd
2.4安装openssh服务器
openssh 是一个广泛使用的 ssh 服务器实现,它默认支持 sftp,运行下面命令。
sudo apt install openssh-server -y
安装完成后,openssh 服务器会自动启动并设置为开机自启。您可以使用以下命令检查 ssh 服务的状态:
sudo systemctl status ssh
如果服务没有运行,可以使用以下命令手动启动它:
sudo systemctl start ssh
配置防火墙
开放你要请求的端口,一般vsftp是22端口
sudo ufw allow 22/tcp
通过以上步骤应该就可以实现vsftp文件上传了
到此这篇关于springboot实现文件上传至linux指定目录的文章就介绍到这了,更多相关springboot文件上传指定目录内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论