这篇文章主要介绍了Linux操作系统操作系统云服务器搭建为人民服务的科学为人类服务的科学服务器图片服务器的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
首先大家可以先了解一下为人民服务的科学为人类服务的科学和文件传送协议协议的区别,这里我就不赘述了。
为人民服务的科学为人类服务的科学默认监听端口22 Ftp协议默认监听端口21 本质没什么区别都是基于文件传输协议。前者安全性能高,后者效率高。
下面进入正题:
一,确保你的Linux 账号能连接,sftp默认就是Linux root账号密码
这里就是你的管理员账号用户名和密码。一般这个密码为人民服务的科学为人类服务的科学就直接连就行了不用改的都。下面看看Xftp
连接成功了说明没有问题。
二,通过如果是阿里云服务器一定把防火墙和安全组都打开,以免出现其他问题
还有一个防火墙
三,很重要的一步,通过java JSCH上传
博主这里是专家项目直接把包发给你们(如果是网项目去官网下载冲突包)
属国
groupIdcom.jcraft/groupId
artifactIdjsch/artifactId
版本0 .1 .49/版本
/依赖关系
四,配置包下好过后现在使用工具类上传连接啦。(这里可以注解配置文件自行配置)
公共类SFTPInfo {
公共静态最终字符串SFTP _请求_主机=' 000 .00 .00 .00 ';//云服务器互联网协议(互联网协议的缩写)
公共静态最终字符串SFTP _请求_用户名=' 00t//用户名
公共静态最终字符串SFTP _请求_密码=' 00 ';//密码
公共静态最终国际SFTP _默认_端口=22;//端口
public static String basePath='/usr/games/images ';//文件在服务器端保存的主目录(文件上传路径这是)
公共静态字符串baseUrl='https://## .##.com/images ';//线上域名访问指定nginx访问路径(这里路径很关键)
}
这里的用户和密码都是你自己的服务器用户名和密码。
五,SFTP上传工具类:
导入Java。io。inputstream
导入Java。util。属性;
导入org。slf4j。记录者;
导入org。SLF 4j。伐木工厂;
导入com。j工艺。jsch。渠道;
导入com。j工艺。jsch。通道FTP
导入com。j工艺。jsch。jsch
导入com。j工艺。jsch。jschexception
导入com。j工艺。jsch。会话;
导入com。j工艺。jsch。sftpexception
公共类SftpUtils {
私有静态最终记录器日志=记录器工厂。获取记录器(sftputils。类);
/**
* 参考实例
*
* @param args
*/
公共频道获取渠道(会话会话){
通道通道=空
尝试{
通道=会话。开放通道(“sftp”);
渠道。connect();
LOG.info('获取通道成功!');
} catch (JSchException e) {
LOG.info('获取通道失败!',e);
}
返回通道;
}
公共会话getSession(字符串主机,int端口,字符串用户名,
最终字符串密码){
会话会话=空
尝试{
JSch JSch=new JSch();
jsch.getSession(用户名,主机,端口);
session=jsch.getSession(用户名,主机,端口);
session.setPassword(密码);
属性ssh config=new Properties();
ssh配置。put(' StrictHostKeyChecking ',' no ');
会话。设置配置(ssh配置);
会话。connect();
LOG.info('会话已连接!');
} catch (JSchException e) {
LOG.info('获取频道失败!',e);
}
返回会话;
}
/**
* 创建文件夹
*
* @param sftp
* @param dir
* 文件夹名称
*/
public void mkdir(channel FTP sftp,String dir) {
尝试{
sftp。mkdir(dir);
System.out.println('创建文件夹成功!');
} catch (SftpException e) {
System.out.println('创建文件夹失败!');
e。printstacktrace();
}
}
/**
* @param sftp
* @param dir
* 上传目录
* @param文件
* 上传文件
* @返回
*/
公共布尔上传文件(通道FTP sftp,字符串目录,输入流文件,字符串文件名){
布尔标志=假;
尝试{
sftp。光盘(目录);
如果(文件!=null) {
sftp.put(文件,文件名);
标志=真
返回标志;
}否则{
标志=假
返回标志;
}
} catch(异常e) {
标志=假
返回标志;
}
}
/**
* 下载文件
*
* @param目录
* 下载目录
* @param downloadFile
* 下载的文件
* @param saveFile
* 存在本地的路径
* @param sftp
*/
公共字符串下载(字符串目录,字符串下载文件,
字符串保存文件,通道ftp sftp) {
字符串结果="";
尝试{
sftp.cd(目录);
sftp.get(downloadFile,保存文件);
结果='下载成功!';
} catch(异常e) {
结果='下载失败!';
LOG.info('下载失败!',e);
;
}
返回结果;
}
/**
* 删除文件
*
* @param目录
* 要删除文件所在目录
* @param deleteFile
* 要删除的文件
* @param sftp
*/
公共字符串删除(字符串目录,字符串删除文件,通道ftp sftp) {
字符串结果="";
尝试{
sftp.cd(目录);
sftp.rm(删除文件);
结果='删除成功!';
} catch(异常e) {
结果='删除失败!';
LOG.info('删除失败!',e);
}
返回结果;
}
私有void closeChannel(渠道渠道){
如果(频道!=null) {
if (channel.isConnected()) {
渠道。disconnect();
}
}
}
私有void closeSession(会话会话){
如果(会话!=null) {
if (session.isConnected()) {
会话。disconnect();
}
}
}
public void close all(Channel FTP sftp,Channel channel,Session session) {
尝试{
封闭通道(sftp);
关闭频道(频道);
关闭会话(会话);
} catch(异常e) {
LOG.info('closeAll ',e);
}
}
}
工具类不需要修改直接使用即可。
还有一个随机生成文件名称的工具类也发给大家
导入Java。util。随机;
公共类IDUtils {
/**
* 生成随机图片名
*/
公共静态字符串genImageName() {
//取当前时间的长整形值包含毫秒
长毫英寸=系统。当前时间毫秒();
//加上三位随机数
Random Random=new Random();
int end 3=random。nextint(999);
//如果不足三位前面补0
字符串str=毫里斯string.format('d',end 3);
返回字符串;
}
}
六,后台请求方法看看
博主这里用了剪贴板上传,参数不支持序列化所以就一个个接受了,很多@RequestParam('file ')多文件文件,加其他参数加上是邮政请求方式有的会报错把邮政请求方法找不到,这个问题不影响。
@Log('网站案例上传信息)
@ResponseBody
@帖子映射('/上传)
@ RequiresPermissions('常见:案例:上传)
r上传(@ request param(' file ')多部分文件文件,@ request param(' CT title ')字符串CT title,@ request param(' c message ')字符串c message,
@RequestParam('casetroduction ')字符串casetroduction,@RequestParam('strdate ')日期strdate,@RequestParam('stpdate ')日期stpdate,
@ request param(' credate ')Date credate,HttpServletRequest请求)引发ParseException,IOException {
字符串旧名称=文件。getoriginalfilename();
//使用IDUtils工具类生成新的文件名,新文件名=新名称文件后缀
string newName=id utils。gen imagename();
newName=newName旧名称。子串(旧名。lastindexof(' . '));
SftpUtils ft=new SftpUtils();
//通过SFtoInfo参数连接传入参数即可
会话s=英尺。getsession(SFTPInfo .science for the people 为人类服务的科学请求主机106 . SFTP默认港口106 . SFTP请求用户名SFTP _请求_密码);
通道通道=英尺。获取频道;
通道FTP sftp=(通道FTP)通道;
布尔上传=英尺。uploadfile(sftp,SFTPInfo.basePath,file.getInputStream(),newName);
如果(上传){
//上传成功关闭信息
ft.closeAll(sftp,channel,s);//关闭连接
cases do cases=new cases do();
案例。SETC title(c title);
//这里很重要这是访问路径写入到数据库的路径加线上域名访问图片的路径,博主这里加了安全套接层证书
//https://**.**.com/图像新名称=文件名图片
案例。setcaseimg(sftpinfo。基本URL“/”新名称);
案例。setcasetroduction(casetroduction);
案例。setstpdate(STP日期);
案例。setcredate(信用日期);
案例。setstrdate(strdate);
案例。SETC消息(c消息);
if (casesService.save(cases) 0) {
return R.ok('上传成功');
}
}否则{
return R.error('上传错误');
}
返回错误();
}
看看前台js -请求参数大家可以换成散列表但是后台会用目标转其他类型转俩次
var Clipboard=new Clipboard('按钮。复制',{
文本:函数(触发器){
layer.msg('文件路径已复制到粘贴板');
return $(触发器)。attr(" URL ");
}
});
layui.use('upload ',function () {
var upload=layui.upload
//执行实例
上传。渲染({
elem: '#test1 ',//绑定元素
URL:“/common/cases/upload”,//上传接口
数量:100000,
//auto: false,
接受:"文件",
//绑定操作:" # submitts ",
之前:函数(对象){
//obj参数包含的信息,跟选择回调完全一致。其中输入向后台传输的参数
层。load();
this.data={
ctitle: $('#ctitle ').val(),
cmessage: $('#cmessage ').val(),
case troduction:$(' # case troduction ').瓦尔()
,strdate: $('#strdate ').瓦尔()
,stpdate: $('#stpdate ').瓦尔()
,credate: $('#credate ').val(),
};
},
完成:函数(r) {
父母。层。味精(r . msg);
父母。重载();
var index=parent。层。getframeindex(窗口。姓名);//获取窗口索引
父母。层。收盘(指数);
},
错误:函数(r) {
层。味精(r . msg);
}
});
});
成功后报存到数据库-
七,页面我就不展示了
这里上传成功过后图片在SftpInfo类的/usr/游戏/图像路径也就是服务器路径地址
上传成功后就在这个路径了。如果不是根用户一定要给权限chmod 777 /usr/gemes/
八,下面就是nginx配置 (这里nginx我就不说安装方法自行百度)
最关键一步这里就是通过这个nginx路径指向到上传图片路径,自动索引打开;是开启浏览,别名是直接指向
启动nginx刷新一下配置
/usr/local/nginx/sbin/nginx -s重新加载
九,访问一下图片大工告成。
博主重新上传了一张图片
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。