写点什么

Linux 云服务器搭建 SFTP 服务器图片服务器,java 线程原理

作者:Java高工P7
  • 2021 年 11 月 10 日
  • 本文字数:2750 字

    阅读完需:约 9 分钟

}


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


五,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 {


/**



    《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
    浏览器打开:qq.cn.hn/FTe 免费领取
    复制代码


    生成随机图片名


    */


    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);


    if(upload){


    //上传成功关闭信息


    ft.closeAll(sftp, channel, s); //关闭连接


    CasesDO cases=new CasesDO();


    cases.setCtitle(ctitle);


    // 这里很重要 这是访问路径写入到数据库的路径加线上域名访问图片的路径,博主这里加了 ssl 证书


    // https://..com/images newName=文件名图片


    cases.setCaseimg(SFTPInfo.baseUrl + "/" + newName);


    cases.setCasetroduction(casetroduction);


    cases.setStpdate(stpdate);


    cases.setCredate(credate);


    cases.setStrdate(strdate);


    cases.setCmessage(cmessage);


    if (casesService.save(cases) > 0) {


    return R.ok("上传成功");


    }


    }else {


    return R.error("上传 error");


    }


    return R.error();


    }


    看看前台 js------请求参数大家可以换成 HashMap 但是后台会用 Object 转其他类型转俩次


    var clipboard = new Clipboard('button.copy', {


    text: function (trigger) {


    layer.msg('文件路径已复制到粘贴板');


    return $(trigger).attr('url');


    }


    });


    layui.use('upload', function () {

    用户头像

    Java高工P7

    关注

    还未添加个人签名 2021.11.08 加入

    还未添加个人简介

    评论

    发布
    暂无评论
    Linux云服务器搭建SFTP服务器图片服务器,java线程原理