mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-15 05:59:17 +03:00
51 lines
1.4 KiB
Bash
51 lines
1.4 KiB
Bash
![]() |
#!/usr/bin/env bash
|
||
|
|
||
|
# Adapted from:
|
||
|
# - https://github.com/tus/tus.io/issues/96
|
||
|
|
||
|
if [ ! -f "${1}" ]; then
|
||
|
echo -e "\n\033[1;31m✘\033[0m First argument needs to be an existing file.\n"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
if [ -z "${2}" ]; then
|
||
|
echo -e "\n\033[1;31m✘\033[0m Second argument needs to be the TUS server's URL.\n"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
file=${1}
|
||
|
TUS_URL=${2}
|
||
|
filename=$(basename "${file}" | base64)
|
||
|
filesize="$(wc -c <"${file}")"
|
||
|
|
||
|
# Apparently 'Location: ..' is terminated by CRLF. grep and awk faithfully
|
||
|
# preserve the line ending, and the shell's $() substitution strips off the
|
||
|
# final LF leaving you with a string that just ends with a CR.
|
||
|
#
|
||
|
# When the CR is printed, the cursor moves to the beginning of the line and
|
||
|
# whatever gets printed next overwrites what was there.
|
||
|
# ... | tr -d '\015'
|
||
|
location=$(curl \
|
||
|
--silent --show-error \
|
||
|
-I \
|
||
|
-X POST \
|
||
|
-H "Tus-Resumable: 1.0.0" \
|
||
|
-H "Content-Length: 0" \
|
||
|
-H "Upload-Length: ${filesize}" \
|
||
|
-H "Upload-Metadata: name ${filename}" \
|
||
|
"${TUS_URL}" | grep 'Location:' | awk '{print $2}' | tr -d '\015')
|
||
|
|
||
|
if [ -n "${location}" ]; then
|
||
|
curl \
|
||
|
-X PATCH \
|
||
|
-H "Tus-Resumable: 1.0.0" \
|
||
|
-H "Upload-Offset: 0" \
|
||
|
-H "Content-Length: ${filesize}" \
|
||
|
-H "Content-Type: application/offset+octet-stream" \
|
||
|
--data-binary "@${file}" \
|
||
|
"${location}" -v
|
||
|
else
|
||
|
echo -e "\n\033[1;31m✘\033[0m File creation failed..\n"
|
||
|
exit 1
|
||
|
fi
|