0
使用transfer部署一个内网上传程序
source link: https://wiki.eryajf.net/pages/2b9a35/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
使用transfer部署一个内网上传程序
- 软件官网:https://transfer.sh/
# 1,部署
docker run -d --publish 8001:8080 -v /data/upload/:/data/upload dutchcoders/transfer.sh:latest --provider local --basedir /data/upload --log /data/upload/transfer.log
# 2,域名
可以用NGINX简单配置一个域名代理。
server {
listen 80;
server_name file.test.com;
root /data/upload;
# 配置内网访问
allow 0.0.0.0/0
deny all;
client_header_timeout 256s;
client_body_timeout 256s;
client_max_body_size 5g;
client_body_buffer_size 256k;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8001;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 3,使用
# Upload:
$ curl --upload-file ./hello.txt https://file.test.com/hello.txt
# Encrypt & upload:
$ cat /tmp/hello.txt|gpg -ac -o-|curl -X PUT --upload-file "-" https://file.test.com/test.txt
# Download & decrypt:
$ curl https://file.test.com/1lDau/test.txt|gpg -o- > /tmp/hello.txt
# Upload to virustotal:
$ curl -X PUT --upload-file nhgbhhj https://file.test.com/test.txt/virustotal
# Deleting
$ curl -X DELETE <X-Url-Delete Response Header URL>
# 4,优化
# 1,优化脚本
这种可能不太方便,可以创建一个命令,通过命令直接进行上传:
$ cat /usr/local/bin/transfer
#!/bin/bash
get_base_url() {
ip=`hostname -I 2>&1`
if [[ $ip =~ "10" ]]
then
base_url='http://file1.test.com'
else
base_url='http://file.test.com'
fi
echo ${base_url}
}
get_system() {
uname_str=`uname -a`
if [[ ${uname_str} =~ "Darwin" ]]
then
system_str='osx'
elif [[ ${uname_str} =~ "Linux" ]]
then
system_str='linux'
fi
echo ${system_str}
}
print() {
msg=$1
color=$2
# 按系统指定颜色
system_str=`get_system`
case "${system_str}" in
"linux")
echo_with_color='echo -e'
;;
"osx")
echo_with_color='echo -e'
;;
esac
case "${color}" in
"black")
${echo_with_color} "\033[30m${msg}\033[0m"
;;
"red")
${echo_with_color} "\033[31m${msg}\033[0m"
;;
"green")
${echo_with_color} "\033[32m${msg}\033[0m"
;;
"yellow")
${echo_with_color} "\033[33m${msg}\033[0m"
;;
"blue")
${echo_with_color} "\033[34m${msg}\033[0m"
;;
"purple")
${echo_with_color} "\033[35m${msg}\033[0m"
;;
"sky-blue")
${echo_with_color} "\033[36m${msg}\033[0m"
;;
"white")
${echo_with_color} "\033[37m${msg}\033[0m"
;;
*)
${echo_with_color} ${msg}
esac
}
# print out help for the forgetful
function check_help {
if [ ! -n "$1" ] || [ "$1" = "-h" ] || [ "$1" = "-help" ] || [ "$1" = "--help" ] ; then
print '[使用说明]:' green
print '\ttransfer 文件名 [最大下载次数(默认: 25)] [最大保留时间(单位: 天, 默认: 1)]'
print '[示例]:' green
print '\ttransfer a.log'
print '\ttransfer a.log 5'
print '\ttransfer a.log 5 0.1'
kill -SIGINT $$
fi
}
transfer() {
# 检测帮助文档
check_help $1
# 获取base_url
base_url=`get_base_url`
file=$1
max_download_num=$2
max_download_days=$3
# check file
if [ ! -f "${file}" ]; then
print "[error]: 您上传的文件${file}不存在或不是文件" red
exit 0
fi
# download_num
if [ ! -n "${max_download_num}" ]; then
max_download_num=25
fi
# download_days
if [ ! -n "${max_download_days}" ]; then
max_download_days=1
fi
# prompt
print "[info]: 你输入的文件是${file} \n[info]: 正在上传, 请稍后..." sky-blue
# 上传
result_url=`curl -H "Max-Downloads: ${max_download_num}" -H "Max-Days: ${max_download_days}" --progress-bar --upload-file "${file}" ${base_url}/$(basename $1)`;
# 替换 获取外网、内网地址
external_url=`echo ${result_url} | sed 's/file2.wpt.la/file.wpt.la/'`
inner_url=`echo ${result_url} | sed 's/file.wpt.la/file2.wpt.la/'`
print "[info]: 恭喜你上传成功" sky-blue
print "[info]: 相关信息: \n\t下载次数: ${max_download_num} \n\t保留天数: ${max_download_days} \n\t外网: ${external_url} \n\t内网: ${inner_url}" sky-blue
exit
}
transfer $*
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
用法如下:
$ transfer
[使用说明]:
transfer 文件名 [最大下载次数(默认: 25)] [最大保留时间(单位: 天, 默认: 1)]
[示例]:
transfer a.log
transfer a.log 5
transfer a.log 5 0.1
1
2
3
4
5
6
7
2
3
4
5
6
7
过期之后将会自动清理。
# 2,定时清理
因为程序强调的是文件临时中转,因此最好添加一个定时清理存储目录的任务:
03 03 * * * rsync --delete-before -d /empty/ /data/upload/
首先创建一个 /empty
目录,然后每晚清空上传目录。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK