Linux云服务器搭建SFTP服务器图片服务器
创始人
2025-01-17 10:05:40
0

还有一个防火墙

三,很重要的一步,通过java JSCH上传,博主这里是maven项目直接把包发给你们(如果是web项目去官网下载jar包)

==============================================================

com.jcraft

jsch

0.1.49

四,配置包下好过后现在使用工具类上传连接啦。(这里可以注解配置文件自行配置)

======================================

public class SFTPInfo {

public static final String SFTP_REQ_HOST = “000.00.00.00”;        //云服务器ip

public static final String SFTP_REQ_USERNAME = “00t”;           // 用户名

public static final String SFTP_REQ_PASSWORD = “00”;      //密码

public static final int SFTP_DEFAULT_PORT = 22;                  //端口

public static String basePath=“/usr/games/images”;               // 文件在服务器端保存的主目录 (文件上传路径这是)

public  static String baseUrl=“https://##.##.com/images”;   //线上域名访问指定nginx访问路径

(这里路径很关键)

}

这里的用户和密码都是你自己的服务器用户名和密码。

五,SFTP上传工具类:

============

import java.io.InputStream;

import java.util.Properties;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import com.jcraft.jsch.Channel;

import com.jcraft.jsch.ChannelSftp;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.JSchException;

import com.jcraft.jsch.Session;

import com.jcraft.jsch.SftpException;

public class SftpUtils {

private static final Logger LOG = LoggerFactory.getLogger(SftpUtils.class);

/**

  • 参考实例

  • @param args

*/

public Channel getChannel(Session session) {

Channel channel = null;

try {

channel = session.openChannel(“sftp”);

channel.connect();

LOG.info(“get Channel success!”);

} catch (JSchException e) {

LOG.info(“get Channel fail!”, e);

}

return channel;

}

public Session getSession(String host, int port, String username,

final String password) {

Session session = null;

try {

JSch jsch = new JSch();

jsch.getSession(username, host, port);

session = jsch.getSession(username, host, port);

session.setPassword(password);

Properties sshConfig = new Properties();

sshConfig.put(“StrictHostKeyChecking”, “no”);

session.setConfig(sshConfig);

session.connect();

LOG.info(“Session connected!”);

} catch (JSchException e) {

LOG.info(“get Channel failed!”, e);

}

return session;

}

/**

  • 创建文件夹

  • @param sftp

  • @param dir

  •        文件夹名称 

*/

public void mkdir(ChannelSftp sftp, String dir) {

try {

sftp.mkdir(dir);

System.out.println(“创建文件夹成功!”);

} catch (SftpException e) {

System.out.println(“创建文件夹失败!”);

e.printStackTrace();

}

}

/**

  • @param sftp

  • @param dir

  •        上传目录 
  • @param file

  •        上传文件 
  • @return

*/

public Boolean uploadFile(ChannelSftp sftp, String dir, InputStream file,String fileName) {

Boolean flag = false;

try {

sftp.cd(dir);

if (file != null) {

sftp.put(file, fileName);

flag=true;

return flag;

} else {

flag=false;

return flag;

}

} catch (Exception e) {

flag=false;

return flag;

}

}

/**

  • 下载文件

  • @param directory

  •        下载目录 
  • @param downloadFile

  •        下载的文件 
  • @param saveFile

  •        存在本地的路径 
  • @param sftp

*/

public String download(String directory, String downloadFile,

String saveFile, ChannelSftp sftp) {

String result = “”;

try {

sftp.cd(directory);

sftp.get(downloadFile, saveFile);

result = “下载成功!”;

} catch (Exception e) {

result = “下载失败!”;

LOG.info(“下载失败!”, e);

;

}

return result;

}

/**

  • 删除文件

  • @param directory

  •        要删除文件所在目录 
  • @param deleteFile

  •        要删除的文件 
  • @param sftp

*/

public String delete(String directory, String deleteFile, ChannelSftp sftp) {

String result = “”;

try {

sftp.cd(directory);

sftp.rm(deleteFile);

result = “删除成功!”;

} catch (Exception e) {

result = “删除失败!”;

LOG.info(“删除失败!”, e);

}

return result;

}

private void closeChannel(Channel channel) {

if (channel != null) {

if (channel.isConnected()) {

channel.disconnect();

}

}

}

private void closeSession(Session session) {

if (session != null) {

if (session.isConnected()) {

session.disconnect();

}

}

}

public void closeAll(ChannelSftp sftp, Channel channel, Session session) {

try {

closeChannel(sftp);

closeChannel(channel);

closeSession(session);

} catch (Exception e) {

LOG.info(“closeAll”, e);

}

}

}

工具类不需要修改直接使用即可。

还有一个随机生成文件名称的工具类也发给大家

import java.util.Random;

public class IDUtils {

/**

  • 生成随机图片名

*/

public static String genImageName() {

//取当前时间的长整形值包含毫秒

long millis = System.currentTimeMillis();

//加上三位随机数

Random random = new Random();

int end3 = random.nextInt(999);

//如果不足三位前面补0

String str = millis + String.format(“%03d”, end3);

return str;

}

}

六,后台请求方法看看

============

博主这里用了 Clipboard 上传,参数不支持序列化所以就一个个接受了,很多@RequestParam(“file”) MultipartFile file,加其他参数加上是post请求方式有的会报错把post请求方法找不到,这个问题不影响。

@Log(“网站案例上传信息”)

@ResponseBody

@PostMapping(“/upload”)

@RequiresPermissions(“common:cases:upload”)

R upload(@RequestParam(“file”) MultipartFile file,@RequestParam(“ctitle”) String ctitle, @RequestParam(“cmessage”) String cmessage,

@RequestParam(“casetroduction”) String casetroduction,@RequestParam(“strdate”) Date strdate,@RequestParam(“stpdate”) Date stpdate,

@RequestParam(“credate”) Date credate,HttpServletRequest request) throws ParseException, IOException {

String oldName = file.getOriginalFilename();

//使用IDUtils工具类生成新的文件名,新文件名 = newName + 文件后缀

String newName = IDUtils.genImageName();

newName = newName + oldName.substring(oldName.lastIndexOf(“.”));

SftpUtils ft = new SftpUtils();

//通过SFtoInfo 参数连接传入参数即可

Session s = ft.getSession(SFTPInfo.SFTP_REQ_HOST,SFTPInfo.SFTP_DEFAULT_PORT, SFTPInfo.SFTP_REQ_USERNAME,SFTPInfo.SFTP_REQ_PASSWORD);

Channel channel = ft.getChannel(s);

ChannelSftp sftp = (ChannelSftp)channel;

Boolean upload = ft.uploadFile(sftp,SFTPInfo.basePath, file.getInputStream(),newName);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

机会是留给有准备的人,大家在求职之前应该要明确自己的态度,熟悉求职流程,做好充分的准备,把一些可预见的事情做好。

对于应届毕业生来说,校招更适合你们,因为绝大部分都不会有工作经验,企业也不会有工作经验的需求。同时,你也不需要伪造高大上的实战经验,以此让自己的简历能够脱颖而出,反倒会让面试官有所怀疑。

你在大学时期应该明确自己的发展方向,如果你在大一就确定你以后想成为Java工程师,那就不要花太多的时间去学习其他的技术语言,高数之类的,不如好好想着如何夯实Java基础。下图涵盖了应届生乃至转行过来的小白要学习的Java内容:

请转发本文支持一下

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
lt=“img” style=“zoom: 33%;” />

总结

机会是留给有准备的人,大家在求职之前应该要明确自己的态度,熟悉求职流程,做好充分的准备,把一些可预见的事情做好。

对于应届毕业生来说,校招更适合你们,因为绝大部分都不会有工作经验,企业也不会有工作经验的需求。同时,你也不需要伪造高大上的实战经验,以此让自己的简历能够脱颖而出,反倒会让面试官有所怀疑。

你在大学时期应该明确自己的发展方向,如果你在大一就确定你以后想成为Java工程师,那就不要花太多的时间去学习其他的技术语言,高数之类的,不如好好想着如何夯实Java基础。下图涵盖了应届生乃至转行过来的小白要学习的Java内容:

请转发本文支持一下

[外链图片转存中…(img-Nolbnel3-1713218770601)]

[外链图片转存中…(img-YUniMY1t-1713218770601)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

相关内容

热门资讯

透视安卓版(Wpk)微扑克德州... 透视安卓版(Wpk)微扑克德州专用辅助器(透视)详细辅助新2025版(都是真的有挂)1.微扑克德州专...
透视代打(wepower德州)... 透视代打(wepower德州)德州ai辅助有用(透视)总是真的是有挂(详细辅助德州教程)1、金币登录...
aapoker透视辅助!aap... aapoker透视辅助!aapoker有外挂吗,(德州aa扑克)竟然是真的有挂(详细辅助爆料教程);...
透视智能ai(Wpk)微扑克德... 透视智能ai(Wpk)微扑克德州专用辅助器(透视)详细辅助辅助教程(总是存在有挂);1、微扑克德州专...
aapoker有挂!aapok... aapoker有挂!aapoker钻石代理有挂的,(aAPOKER)都是存在有挂(详细辅助可靠教程)...
透视辅助(德州之星)德州ai辅... 透视辅助(德州之星)德州ai辅助软件(透视)切实存在有挂(详细辅助攻略教程)1、下载好德州ai辅助软...
透视美元局(wPK)微扑克游戏... 透视美元局(wPK)微扑克游戏辅助器(透视)详细辅助玩家教程(切实有挂)1、不需要AI权限,帮助你快...
aapoker猫腻!aa扑克平... aapoker猫腻!aa扑克平台,(aapoKER)确实是真的有挂(详细辅助可靠技巧)aapoker...
透视美元局(德州俱乐部)智星德... 透视美元局(德州俱乐部)智星德州菠萝有挂吗(透视)都是是真的有挂(详细辅助透明教程)1、实时智星德州...
透视实锤(微扑克)wpk发牌逻... 透视实锤(微扑克)wpk发牌逻辑(透视)详细辅助揭秘教程(其实有挂);1、下载好wpk发牌逻辑辅助软...