split upload with moar features
This commit is contained in:
148
code/app.py
148
code/app.py
@@ -133,8 +133,14 @@ def upload_join_splitted(name, token):
|
||||
return "Upload not allowed",400
|
||||
if not 'filename' in request.form:
|
||||
return "No filename given", 400
|
||||
if not 'parts' in request.form:
|
||||
return "No parts count given", 400
|
||||
try:
|
||||
no_parts = int(request.form['parts'])
|
||||
except:
|
||||
return "Parts not parseable", 400
|
||||
parts = []
|
||||
for part in range(500):
|
||||
for part in range(no_parts):
|
||||
filename = os.path.join(
|
||||
share['path'],
|
||||
".%s.part.%03d"%(
|
||||
@@ -351,42 +357,11 @@ def script_upload(name = None, token = None):
|
||||
return share
|
||||
if not get_or_none('upload', share) == True:
|
||||
return "Upload not allowed",400
|
||||
return """#!/bin/bash
|
||||
test -n "$1" || {
|
||||
echo "Add files to upload as argument"
|
||||
exit 1
|
||||
}
|
||||
CAT=$( which cat )
|
||||
which pv &> /dev/null && CAT=$( which pv )
|
||||
ROOTURL="%s"
|
||||
SHARE="%s"
|
||||
TOKEN="%s"
|
||||
|
||||
send_file() {
|
||||
$CAT "$file_name" | curl -F "file=@-;filename=${base_name}" ${ROOTURL}upload/${SHARE}/${TOKEN}
|
||||
}
|
||||
send_folder() {
|
||||
which pv &> /dev/null && printf -v dusize -- "--size %%dk" $( du -s -k "$file_name" | cut -f1 )
|
||||
tar cz "$file_name" | $CAT $dusize - | curl -F "file=@-;filename=${base_name}.tgz" ${ROOTURL}upload/${SHARE}/${TOKEN}
|
||||
}
|
||||
|
||||
for file_name in "$@"; do
|
||||
base_name=$( basename "$file_name" )
|
||||
test -f "$file_name" && {
|
||||
printf "Sending file: %%s\n" "$file_name"
|
||||
send_file
|
||||
continue
|
||||
}
|
||||
test -d "$file_name" && {
|
||||
printf "Sending folder: %%s\n" "$file_name"
|
||||
send_folder
|
||||
continue
|
||||
}
|
||||
done
|
||||
"""%(
|
||||
request.url_root,
|
||||
name,
|
||||
token
|
||||
return render_template(
|
||||
"upload.sh",
|
||||
name = name,
|
||||
token = token,
|
||||
rooturl = request.url_root
|
||||
)
|
||||
|
||||
|
||||
@@ -395,99 +370,40 @@ def script_download(name = None, token = None):
|
||||
(ok,share) = get_share(name, token = token)
|
||||
if not ok:
|
||||
return share
|
||||
files = []
|
||||
commands = []
|
||||
for file in iter_folder_files(share['path']):
|
||||
status = file_stat(share['path'], file)
|
||||
files.append(status)
|
||||
script = """#!/bin/bash
|
||||
test "$1" = "-h" && {
|
||||
echo "Add argument -f to overwrite files"
|
||||
exit 0
|
||||
}
|
||||
test "$1" = "-f" && FORCE=1
|
||||
which curl &> /dev/null || {
|
||||
echo "curl required"
|
||||
exit 1
|
||||
}
|
||||
ROOTURL="%s"
|
||||
SHARE="%s"
|
||||
TOKEN="%s"
|
||||
get_file() {
|
||||
WRITE=0
|
||||
FILENAME="$1"
|
||||
test "$FORCE" = "1" && WRITE=1
|
||||
test -f "${FILENAME}" || WRITE=1
|
||||
test "$WRITE" = "1" && {
|
||||
echo Downloading ${FILENAME}
|
||||
mkdir -p $( dirname "$FILENAME" )
|
||||
curl "${ROOTURL}download/${SHARE}/${TOKEN}/${FILENAME}" > "${FILENAME}"
|
||||
} || {
|
||||
echo Skipping ${FILENAME}
|
||||
}
|
||||
}
|
||||
"""%(
|
||||
request.url_root,
|
||||
name,
|
||||
token
|
||||
commands.append('get_file "%s"'%(
|
||||
status['url'],
|
||||
))
|
||||
return render_template(
|
||||
"download.sh",
|
||||
name = name,
|
||||
token = token,
|
||||
rooturl = request.url_root,
|
||||
commands = "\n".join(commands)
|
||||
)
|
||||
|
||||
for file in files:
|
||||
script += 'get_file "%s"\n'%(
|
||||
file['url'],
|
||||
)
|
||||
return script
|
||||
|
||||
|
||||
@app.route('/script/direct/<name>/<token>', methods=['GET'])
|
||||
def script_direct(name = None, token = None):
|
||||
(ok,share) = get_share(name, token = token)
|
||||
if not ok:
|
||||
return share
|
||||
files = []
|
||||
commands = []
|
||||
for file in iter_folder_files(share['path']):
|
||||
status = file_stat(share['path'], file)
|
||||
status.update({
|
||||
'token': get_direct_token(share, file)
|
||||
})
|
||||
files.append(status)
|
||||
script = """#!/bin/bash
|
||||
test "$1" = "-h" && {
|
||||
echo "Add argument -f to overwrite files"
|
||||
exit 0
|
||||
}
|
||||
test "$1" = "-f" && FORCE=1
|
||||
which curl &> /dev/null || {
|
||||
echo "curl required"
|
||||
exit 1
|
||||
}
|
||||
ROOTURL="%s"
|
||||
SHARE="%s"
|
||||
get_file() {
|
||||
WRITE=0
|
||||
FILENAME="$1"
|
||||
TOKEN="$2"
|
||||
test "$FORCE" = "1" && WRITE=1
|
||||
test -f "${FILENAME}" || WRITE=1
|
||||
test "$WRITE" = "1" && {
|
||||
echo Downloading ${FILENAME}
|
||||
mkdir -p $( dirname "$FILENAME" )
|
||||
curl "${ROOTURL}direct/${SHARE}/${TOKEN}/${FILENAME}" > "${FILENAME}"
|
||||
} || {
|
||||
echo Skipping ${FILENAME}
|
||||
}
|
||||
}
|
||||
"""%(
|
||||
request.url_root,
|
||||
name,
|
||||
commands.append('get_file "%s" "%s"'%(
|
||||
status['url'],
|
||||
get_direct_token(share, file)
|
||||
))
|
||||
return render_template(
|
||||
"download_direct.sh",
|
||||
name = name,
|
||||
rooturl = request.url_root,
|
||||
commands = "\n".join(commands)
|
||||
)
|
||||
|
||||
for file in files:
|
||||
script += 'get_file "%s" "%s"\n'%(
|
||||
file['url'],
|
||||
file['token'],
|
||||
)
|
||||
return script
|
||||
|
||||
|
||||
@app.route('/script/upload_split/<name>/<token>', methods=['GET'])
|
||||
def script_upload_split(name = None, token = None):
|
||||
|
||||
Reference in New Issue
Block a user