split upload with moar features

This commit is contained in:
Ville Rantanen
2018-03-15 22:29:07 +02:00
parent 61d872fa17
commit acb366120d
5 changed files with 196 additions and 127 deletions

View File

@@ -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):