X-Git-Url: https://git.plutz.net/?p=rawnet;a=blobdiff_plain;f=upload.sh;fp=upload.sh;h=dd678fef8a6aa4020b0f623b2b82e6139e0d3e20;hp=0000000000000000000000000000000000000000;hb=74cc921e6bcc52387f4e652f0d95f67eb9edfd50;hpb=abe43467796699b21501e922247c4eaf681ee273 diff --git a/upload.sh b/upload.sh new file mode 100755 index 0000000..dd678fe --- /dev/null +++ b/upload.sh @@ -0,0 +1,54 @@ +#!/bin/sh + +UPLOAD(){ + local file="$1" + local boundary line length=0 + + [ ! "${CONTENT_TYPE}" -o "${CONTENT_TYPE##multipart/form-data;*}" ] && return 1 + + boundary="${CONTENT_TYPE#*; boundary=}" + boundary="${boundary%%;*}" + + while read -r line; do + length="$(( length + ${#line} + 1))" + [ "${line%${CR}}" = "--$boundary" ] && break + done + while read -r line; do + length="$(( length + ${#line} + 1))" + [ ! "${line%${CR}}" ] && break \ + || debug "$line" + done + + printf "%i\n" "$(( CONTENT_LENGTH - length ))" >"${file}.upload" + head -c "$(( CONTENT_LENGTH - length ))" \ + | sed -nE ' + # print lines until boundary ( = actual file upload) + :FILE; p; n; + /^--'"${boundary}"'(--)?\r?$/!bFILE; + # discard remaining lines + :END; $q; n; bEND; + ' >"$file" + truncate -s $(( $(stat -c %s -- "$file") -2 )) -- "$file" + rm -- "${file}.upload" +} + +frame_uploadprogress() { + printf ' + + Upload Progress + + + ' "$_BASE" + printf '
%i / %i
\n' 0 0 + while [ ! -f "$_DATA/$channel/$video.mp4" -a \ + ! -f "$_DATA/$channel/$video.mp4.upload" ]; do sleep 1; done + read size <"$_DATA/$channel/$video.mp4.upload" + while [ -f "$_DATA/$channel/$video.mp4.upload" ]; do + stat="$(stat -c %s "$_DATA/$channel/$video.mp4" 2>&-)" + printf '
%iMB / %iMB
\n' \ + "$(( stat * 100 / size ))" "$((stat / 1048576))" "$((size / 1048576))" + sleep 1 + done + printf '
Ready!
\n' + printf '' +}