Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
77da01d1
Commit
77da01d1
authored
Dec 02, 2015
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完成上传下载
parent
0e6fd89f
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
85 additions
and
8 deletions
+85
-8
connect.py
connect.py
+5
-1
views.py
jumpserver/views.py
+31
-2
download.html
templates/download.html
+49
-5
No files found.
connect.py
View file @
77da01d1
...
...
@@ -694,6 +694,10 @@ class Nav(object):
logger
.
debug
(
'Upload tmp dir:
%
s'
%
tmp_dir
)
os
.
chdir
(
tmp_dir
)
bash
(
'rz'
)
check_notempty
=
os
.
listdir
(
tmp_dir
)
if
not
check_notempty
:
print
color_print
(
"上传文件为空"
)
continue
runner
=
MyRunner
(
res
)
runner
.
run
(
'copy'
,
module_args
=
'src=
%
s dest=
%
s directory_mode'
%
(
tmp_dir
,
tmp_dir
),
pattern
=
pattern
)
...
...
@@ -742,7 +746,7 @@ class Nav(object):
ret
=
runner
.
get_result
()
os
.
chdir
(
'/tmp'
)
tmp_dir_name
=
os
.
path
.
basename
(
tmp_dir
)
bash
(
'tar czf
%
s.tar.gz
%
s
&& sz
%
s.tar.gz'
%
(
tmp_dir
,
tmp_dir_name
,
tmp_dir
))
bash
(
'tar czf
%
s.tar.gz
%
s
'
%
(
tmp_dir
,
tmp_dir_name
))
if
ret
.
get
(
'failed'
):
print
ret
...
...
jumpserver/views.py
View file @
77da01d1
...
...
@@ -293,8 +293,7 @@ def upload(request):
asset_ids
=
request
.
POST
.
getlist
(
'asset_ids'
,
''
)
upload_files
=
request
.
FILES
.
getlist
(
'file[]'
,
None
)
date_now
=
datetime
.
datetime
.
now
()
.
strftime
(
"
%
Y
%
m
%
d
%
H
%
M
%
S"
)
upload_dir
=
"/tmp/
%
s/
%
s"
%
(
user
.
username
,
date_now
)
mkdir
(
upload_dir
,
mode
=
0777
)
upload_dir
=
get_tmp_dir
()
filenames
=
{}
for
asset_id
in
asset_ids
:
asset_select
.
append
(
get_object
(
Asset
,
id
=
asset_id
))
...
...
@@ -328,6 +327,36 @@ def upload(request):
@login_required
(
login_url
=
'/login'
)
def
download
(
request
):
user
=
request
.
user
assets
=
get_group_user_perm
(
user
)
.
get
(
'asset'
)
.
keys
()
asset_select
=
[]
if
request
.
method
==
'POST'
:
asset_ids
=
request
.
POST
.
getlist
(
'asset_ids'
,
''
)
file_path
=
request
.
POST
.
get
(
'file_path'
)
date_now
=
datetime
.
datetime
.
now
()
.
strftime
(
"
%
Y
%
m
%
d
%
H
%
M
%
S"
)
upload_dir
=
get_tmp_dir
()
for
asset_id
in
asset_ids
:
asset_select
.
append
(
get_object
(
Asset
,
id
=
asset_id
))
if
not
set
(
asset_select
)
.
issubset
(
set
(
assets
)):
illegal_asset
=
set
(
asset_select
)
.
issubset
(
set
(
assets
))
return
HttpResponse
(
'没有权限的服务器
%
s'
%
','
.
join
([
asset
.
hostname
for
asset
in
illegal_asset
]))
res
=
gen_resource
({
'user'
:
user
,
'asset'
:
asset_select
})
runner
=
MyRunner
(
res
)
runner
.
run
(
'fetch'
,
module_args
=
'src=
%
s dest=
%
s'
%
(
file_path
,
upload_dir
),
pattern
=
'*'
)
logger
.
debug
(
runner
.
get_result
())
os
.
chdir
(
'/tmp'
)
tmp_dir_name
=
os
.
path
.
basename
(
upload_dir
)
tar_file
=
'
%
s.tar.gz'
%
upload_dir
bash
(
'tar czf
%
s
%
s && sz
%
s.tar.gz'
%
(
tar_file
,
tmp_dir_name
,
upload_dir
))
f
=
open
(
tar_file
)
data
=
f
.
read
()
f
.
close
()
response
=
HttpResponse
(
data
,
content_type
=
'application/octet-stream'
)
response
[
'Content-Disposition'
]
=
'attachment; filename=
%
s'
%
os
.
path
.
basename
(
tar_file
)
return
response
return
render_to_response
(
'download.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
templates/download.html
View file @
77da01d1
{% extends 'base.html' %}
{% load mytags %}
{% block self_head_css_js %}
<link
href=
"/static/css/plugins/datepicker/datepicker3.css"
rel=
"stylesheet"
>
<link
href=
"/static/css/plugins/chosen/chosen.css"
rel=
"stylesheet"
>
<script
src=
"/static/js/plugins/chosen/chosen.jquery.js"
></script>
{% endblock %}
{% block content %}
{% include 'nav_cat_bar.html' %}
...
...
@@ -22,18 +27,56 @@
</div>
</div>
<div
class=
"ibox-content"
>
<h2>
下载文件可联系管理员在服务器安装lrzsz,使用sz命令下载。
</h2>
<div>
{% for document in documents %}
<a
href=
"/download/{{ document }}"
>
{{ document }}
</a>
<form
id=
"downForm"
class=
"form-horizontal"
method=
"post"
>
{% if error %}
<div
class=
"alert alert-warning text-center"
>
{{ error }}
</div>
{% endif %}
{% if msg %}
<div
class=
"alert alert-success text-center"
>
{{ msg }}
</div>
{% endif %}
<div
class=
"form-group"
>
<label
for=
"file_path"
class=
"col-sm-2 control-label"
>
文件路径
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<input
id=
"file_path"
name=
"file_path"
placeholder=
"File Path"
type=
"text"
class=
"form-control"
>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"user"
class=
"col-sm-2 control-label"
>
选择主机
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<select
name=
"asset_ids"
id=
"asset_ids"
data-placeholder=
"请输入"
class=
"chosen-select form-control m-b"
multiple
tabindex=
"2"
>
{% for asset in assets %}
<option
value=
"{{ asset.id }}"
>
{{ asset.hostname }}
</option>
{% endfor %}
</select>
</div>
</div>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-2"
>
<button
class=
"btn btn-white"
type=
"reset"
>
取消
</button>
<button
id=
"submit_button"
class=
"btn btn-primary"
type=
"submit"
>
下载
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block self_footer_js %}
<script>
var
config
=
{
'.chosen-select'
:
{},
'.chosen-select-deselect'
:
{
allow_single_deselect
:
true
},
'.chosen-select-no-single'
:
{
disable_search_threshold
:
10
},
'.chosen-select-no-results'
:
{
no_results_text
:
'Oops, nothing found!'
},
'.chosen-select-width'
:
{
width
:
"95%"
}
};
for
(
var
selector
in
config
)
{
$
(
selector
).
chosen
(
config
[
selector
]);
}
</script>
{% endblock %}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment