Sringboot项目实现文件上传至linux指定目录

本篇文章讲述一个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的ipport: 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 stubSession 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用户和普通用户上传文件和创建文件夹

  1. 打开终端
  2. 使用文本编辑器编辑vsftpd配置文件。例如,使用vim或vi
sudo vim /etc/vsftpd.conf
  1. 在配置文件中找到以下几个被注释的命令行,按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

6.配置防火墙

开放你要请求的端口,一般vsftp是22端口

sudo ufw allow 22/tcp

通过以上步骤应该就可以实现vsftp文件上传了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/34279.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

电气自动化 基于PLC工业机器人视觉定位及自动码垛系统的设计

摘要 随着我国经济的不断发展&#xff0c;工业机器人将会得到更多的应用&#xff0c;从而达到整个行业的自动化和高速度。由于生产效率的不断提升&#xff0c;对成品进行检验、加工、分级等工作尤为关键。工业机器人是一种高科技的机械设备&#xff0c;它被广泛地运用于焊接、…

云数据库 OceanBase

OceanBase 是阿里巴巴集团自主研发的一款分布式关系型数据库。它采用了分布式架构&#xff0c;能够在大规模、复杂环境下处理海量数据。OceanBase 旨在解决传统数据库在高并发、大规模数据和高可用性场景下的瓶颈&#xff0c;尤其适用于金融、电商、物流等需要高性能、高可靠的…

数据库性能诊断工具DBdoctor 产品介绍

基本信息 DBdoctor是一款专注于数据库性能的生态软件&#xff0c;致力于解决一切数据库性能问题&#xff0c;实现DB AGI。行业首次将eBPF技术聚焦在数据库领域&#xff0c;创新性实现性能可观测。 功能介绍 1.核心功能 SQL审核&#xff0c;性能评估&#xff1a; 独家SQL性能…

AIGC与医学统计学的完美融合:打造智能医疗新时代

文章目录 一、理解统计学基础概念二、掌握描述性统计方法三、学习假设检验方法四、掌握回归分析方法五、学习生存分析方法六、利用现代技术和工具七、注重实践和应用《医学统计学从入门到精通》亮点内容简介作者简介目录获取方式 在AIGC&#xff08;人工智能生成内容&#xff0…

【git reset】本地下载特定历史提交哈希值的github文件【未联网服务器】进行git reset操作

本地电脑下载git文件&#xff0c;并进行git reset操作 问题描述&#xff1a;解决方法&#xff1a;方法1&#xff1a;直接下载特定版本的github压缩包。方法二&#xff1a; 在本地windows电脑上安装git工具进行git reset版本回退&#xff0c;之后上传相应版本的压缩包到服务器上…

emacs 折腾日记(一)——序言

初次知道emacs这个东西是在《程序员的呐喊》这本书。书中的作者提倡学习编译原理&#xff0c;推崇emacs。现在距离我知道emacs已经过去了快8年&#xff0c;期间不断的重复学习——放弃——学习的路子。与过去学习vim类似&#xff0c;vim我也经历过放弃到学习&#xff0c;最后有…

Django基础cookie和session

1.会话跟踪 ​ 什么是会话&#xff01;可以把会话理解为客户端与服务器之间的一次会晤&#xff0c;在一次会晤中可能会包含多次请求和响应。例如给10086打个电话&#xff0c;你就是客户端&#xff0c;而10086服务人员就是服务器。从双方接通电话那一刻起&#xff0c;会话就开始…

EMC测试——RE、CE、ESD

①辐射发射测试(RE)&#xff1a;评估电子、电气产品或系统在工作状态下产生的电磁辐射干扰程度&#xff0c;确保其不会干扰其他电子设备&#xff0c;同时可以确保产品的电磁辐射水平在安全范围内&#xff0c;从而保护用户免受电磁辐射的危害。消费类常见测试标准&#xff1a;EN…

iOS平台接入Facebook登录

1、FB开发者后台注册账户 2、完善App信息 3、git clone库文件代码接入 4、印尼手机卡开热点调试 备注&#xff1a; 可能遇到的问题&#xff1a; 1、Cocos2dx新建的项目要更改xcode的git设置&#xff0c;不然卡在clone&#xff0c;无法在线获取FBSDK 2、动态库链接 需要在…

解决 PyTorch 中的 AttributeError: ‘NoneType‘ object has no attribute ‘reshape‘ 错误

这里写目录标题 一、错误分析二、错误原因三、解决方案1. 检查损失函数2. 检查前向传播3. 检查 backward 函数4. 检查梯度传递 四、前向传播与反向传播1. 前向传播2. 反向传播3. 自定义 backward 函数示例反向传播过程&#xff1a;常见的错误&#xff1a;1&#xff1a;损失函数…

PT8M2102 触控型 8Bit MCU

1 产品概述 ● PT8M2102 是一款基于 RISC 内核的8位 MTP 单片机&#xff0c;内部集成了电容式触摸感应模块、TIMER&#xff0c;PWM、LVR、LVD、WDT等外设&#xff0c;其主要用作触摸按键开关&#xff0c;广泛适用于触控调光、电子玩具、消费电子、家用电器等领域&#xff0c;具…

工业—使用Flink处理Kafka中的数据_EnvironmentData2

使用Flink 消费 Kafka 中 EnvironmentData 主题的数据 , 监控各环境检测设备数据,当温度 ( Temperature 字段)持续 3 分钟高于

如何通过 Windows 自带的启动管理功能优化电脑启动程序

在日常使用电脑的过程中&#xff0c;您可能注意到开机后某些程序会自动运行。这些程序被称为“自启动”或“启动项”&#xff0c;它们可以在系统启动时自动加载并开始运行&#xff0c;有时甚至在后台默默工作。虽然一些启动项可能是必要的&#xff08;如杀毒软件&#xff09;&a…

javaScript13DOM获取

3.1、DOM初相识 3.1.1、DOM简介 文档对象模型&#xff08;Document Object Model &#xff0c;简称DOM&#xff09;&#xff0c;它就是一些系列编程接口&#xff0c;有了这些接口&#xff0c;就可以改变页面内容&#xff0c;结构和样式 DOM树&#xff1a; 文档&#xff1a;一…

【深度学习基础之Scikit-learn库3】Scikit-learn 库提供了丰富的功能,包括数据预处理、特征选择、模型训练与评估....

【深度学习基础之Scikit-learn库3】Scikit-learn 库提供了丰富的功能&#xff0c;包括数据预处理、特征选择、模型训练与评估… 【深度学习基础之Scikit-learn库3】Scikit-learn 库提供了丰富的功能&#xff0c;包括数据预处理、特征选择、模型训练与评估… 文章目录 【深度学…

【Calibre-Web】Calibre-Web服务器安装详细步骤(个人搭建自用的电子书网站,docker-compose安装)

文章目录 一、Calibre-Web和Calibre的区别是什么&#xff1f;使用场景分别是什么&#xff1f;二、服务器安装docker和docker-compose三、服务器安装Calibre-Web步骤1、安装完成后的目录结构2、安装步骤3、初始配置4、启动上传 四、安装Calibre五、docker-compose常用命令 最近想…

【Canvas与图标】乡土风金属铝边立方红黄底黑字图像处理图标

【成图】 120*120图标&#xff1a; 大小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>金属铝边立方红黄底黑…

vxe-table 键盘操作,设置按键编辑方式,支持覆盖方式与追加方式

vxe-table 全键盘操作&#xff0c;按键编辑方式设置&#xff0c;覆盖方式与追加方式&#xff1b; 通过 keyboard-config.editMode 设置按键编辑方式&#xff1b;支持覆盖方式编辑和追加方式编辑 安装 npm install vxe-pc-ui4.3.15 vxe-table4.9.15// ... import VxeUI from v…

ros2人脸检测

第一步&#xff1a; 首先在工作空间/src下创建数据结构目录service_interfaces ros2 pkg create service_interfaces --build-type ament_cmake 然后再创建一个srv目录 在里面创建FaceDetect.srv&#xff08;注意&#xff0c;首字母要大写&#xff09; sensor_msgs/Image …

Alogrithm:巴斯卡三角形

巴斯卡三角形&#xff08;Pascals Triangle&#xff09;是一个由数字排列成的三角形&#xff0c;每一行的数字是由前一行的两个相邻数字相加得到的。巴斯卡三角形的每一行对应着二项式展开式的系数。具体如下图所示&#xff1a; 巴斯卡三角形的性质 第 0 行只有一个数字 1。第 …