扫描远程文件
1 | /** |
本地文件扫描
解析JSON文件
我们用来解析json格式的jar包有很多,jackson,fastjson,gson都行。但本人喜欢用fastjson。所以本篇都是以fastjson来解析json文件。
文件上传
1 | <fieldset> |
保存到本地
1 |
|
保存至远程服务器
1 |
|
远程连接配置
pom.xml 引入依赖
1
2
3
4
5
6
7
8
9
10
11<!-- sftp -->
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>application-xxx.yml 文件配置参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# 远程访问服务器配置
sftp:
#服务器ip
host: 192.168.1.245
#ssh端口
port: 22
#用户名
username: zkrd
#密码
password: zkrd12#$
# 上传标注文件服务器路径
uploadAnnotateFile: /home/zkrd/label_system/
#连接池参数
pool:
#对象池中管理的最多对象个数。默认值是8
max-total: 10
#对象池中最大的空闲对象个数。默认值是8
max-idle: 10
#对象池中最小的空闲对象个数。默认值是0
min-idle: 5封装类
SftpFactory.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import org.apache.commons.pool2.BasePooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import org.springframework.beans.factory.annotation.Value;
import java.util.Properties;
public class SftpFactory extends BasePooledObjectFactory<ChannelSftp> {
private String host;
private int port;
private String username;
private String password;
public ChannelSftp create() throws JSchException {
JSch jsch = new JSch();
Session sshSession = jsch.getSession(username, host, port);
sshSession.setPassword(password);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
ChannelSftp channel = (ChannelSftp) sshSession.openChannel("sftp");
channel.connect();
return channel;
}
public PooledObject<ChannelSftp> wrap(ChannelSftp channelSftp) {
return new DefaultPooledObject<>(channelSftp);
}
/**
* 销毁对象
*
* @param p
* @return
* @author fengfan
* @date 2022/1/14 15:26
*/
public void destroyObject(PooledObject<ChannelSftp> p) {
ChannelSftp channelSftp = p.getObject();
channelSftp.disconnect();
}
/**
* 激活连接池里面的sftp连接
*
* @param p
* @throws Exception
*/
public void activateObject(PooledObject<ChannelSftp> p) throws Exception {
ChannelSftp channelSftp = p.getObject();
if(!channelSftp.isConnected()){
channelSftp.connect();
}
}
}SftpGenericObjectPool.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19import com.jcraft.jsch.ChannelSftp;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
public class SftpGenericObjectPool {
private final GenericObjectPool<ChannelSftp> genericObjectPool;
public SftpGenericObjectPool(SftpFactory sftpFactory, GenericObjectPoolConfig<ChannelSftp> sftpPoolConfig) {
this.genericObjectPool = new GenericObjectPool<>(sftpFactory, sftpPoolConfig);
}
public ChannelSftp borrowObject() throws Exception {
return genericObjectPool.borrowObject();
}
public void returnObject(ChannelSftp obj) {
genericObjectPool.returnObject(obj);
}
}SftpUtil.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.SftpException;
import java.io.InputStream;
public class SftpUtil {
//连接池
private SftpGenericObjectPool pool;
public SftpUtil(SftpGenericObjectPool pool) {
this.pool = pool;
}
/**
* 下载文件
*
* @param dir 远程目录
* @param name 远程文件名
* @return 文件字节数组
*/
public InputStream download(String dir, String name) throws Exception {
ChannelSftp sftp = pool.borrowObject();
try {
sftp.cd(dir);
return sftp.get(name);
} finally {
pool.returnObject(sftp);
}
}
/**
* 上传文件
*
* @param dir 远程目录
* @param name 远程文件名
* @param in 输入流
*/
public void upload(String dir, String name, InputStream in) throws Exception {
ChannelSftp sftp = pool.borrowObject();
try {
mkdirs(sftp, dir);
sftp.cd(dir);
sftp.put(in, name);
} finally {
pool.returnObject(sftp);
}
}
/**
* 删除文件
*
* @param dir 远程目录
* @param name 远程文件名
*/
public void delete(String dir, String name) throws Exception {
ChannelSftp sftp = pool.borrowObject();
try {
sftp.cd(dir);
sftp.rm(name);
} finally {
pool.returnObject(sftp);
}
}
/**
* 递归创建多级目录
*
* @param dir 多级目录
*/
private void mkdirs(ChannelSftp sftp, String dir) throws SftpException {
String[] folders = dir.split("/");
sftp.cd("/");
for (String folder : folders) {
if (folder.length() > 0) {
try {
sftp.cd(folder);
} catch (Exception e) {
sftp.mkdir(folder);
sftp.cd(folder);
}
}
}
}
public SftpGenericObjectPool getPool() {
return pool;
}
public void setPool(SftpGenericObjectPool pool) {
this.pool = pool;
}
}使用
1
2
3// 注册实例化 sftpUtil
private SftpUtil sftpUtil;
下载文件
java在response中设置文件流,在浏览器中直接显示或直接下载
在浏览器地址栏输入文件请求url,能在浏览器上直接显示文件,而不直接下载
解决方式设置文件ContentType类型
当设置了ContentType为“image/jpg”时,浏览器可以直接显示图片;
没设置ContentType时,浏览器会直接下载图片到本地。
备注:不能设置header,否则当设置了ContentType时也是直接下载图片
1 | /** |
前端图片预览
通过访问地址,在img 标签 src中 渲染
后端:
1 | public static String viewPicture(HttpServletResponse response, String filePath) { |
1 | // uploadAnnotateFile 是上传根路径 |
前端:
1 | <img src="http:xxx:xxx/api/viewPicture?path=/xxx.jpg" /> |
跨域cookie共享
主域 www.xxx.com, iframe 嵌入子页面 22.56.128.50:8888,子页面调用接口歇尔代主页面 的cookie。
1 | <iframe src="www.xxx.com/config/xxxLogin?target=page1"> |
iframe 中的地址是主页面的地址,利用 nginx 匹配 /config 转发 到 22.56.128.50:8888 这样一来 内嵌页面与主页面不跨域了。可以访问主页面的cookie。
但是有个问题,子页面跨域自动携带 cookie 失败了(暂时不大明白原因)。只能通过 js读取cookie 作为参数传递给后端
Mysql 查询表字段结构注释
数据库名 是需要修改的
1 | SELECT |
原文链接:https://blog.csdn.net/LQZ8888/article/details/127879597
查询某数据库下的所有表名 表注释
1 | SELECT |
- 本文作者: 王不留行
- 本文链接: https://wyf195075595.github.io/2023/02/22/programming/java/other/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!