You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
1.4 KiB

# This script reads a file from stdin, and moves it to a certain directory with the shortest name possible that doesn't conflict based on the sha1sum, then echos the URL the file will be available at
# Mainly meant to be used for images from scripts like, it can really be used for any file uploads, nothing is format specific
# Required dependencies are sha1sum, and standard unix utilities tee and cut
dir_name="$1" # directory to store images in
url="$2" # url pointing to directory above
extension="$3" # extension to put on file
# put a . in front of the extension if it isn't empty
[ ! -z "$extension" ] && extension=".$extension"
sha1="$(tee "$tmp_name" | sha1sum | cut -d' ' -f1)"
mkdir -p "$dir_name"
# find shortest substring of hash that doesn't already exist for shortest url possible
# you may change the 5 here to something longer or shorter for more or less security against people guessing your file name
for x in {5..40}
# if the file doesn't exist, or if it exists, but the hash is the same, break
[ ! -e "$fname" ] || [ "$(sha1sum "$fname" | cut -d' ' -f1)" == "$sha1" ] && break
mv "$tmp_name" "$fname"
echo "${url}/${new_name}${extension}"