I’ve been using Pelican to publish this website for awhile now, and one of the things I wanted to do was to be able to post from my phone and include pictures. To accomplish this I wrote a script that checks the upload folder in dropbox, and if there is a file, it will re-size the pictures to 4 different sizes and upload it to Amazon S3. I can then easily link to any of the sizes of pictures for my posts.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#!/bin/bash
TOUPLOAD=/Path/to/check/for/pics/*
SAVEUPLOADED=/Path/to/save/uploaded/pics
S3BUCKET="BUCKET/for/pics"
S3CMD=/usr/local/bin/s3cmd
DIR=/Path/to/html/file/that/has/links/to/pics
UPLOADED=FALSE
if [[ ! -d /tmp/uploadpic ]]; then
mkdir /tmp/uploadpic
fi
if [[ ! -d ${UPLOADED} ]]; then
mkdir -p ${UPLOADED}
fi
shopt -s nullglob
for f in ${TOUPLOAD}
do
if [[ -f ${f} ]]; then
OUT=/tmp/uploadpic
FILENAME=${f}
FULLFILENAME=$(basename "${f}")
EXT=${FULLFILENAME##*.}
FILE=${FULLFILENAME%.*}
echo "Working with ${FILE}.${EXT}"
echo "Resizing"
convert "${FILENAME}" -resize 320x240 "${OUT}/${FILE}-xs.${EXT}"
convert "${FILENAME}" -resize 640x480 "${OUT}/${FILE}-s.${EXT}"
convert "${FILENAME}" -resize 800x600 "${OUT}/${FILE}-m.${EXT}"
convert "${FILENAME}" -resize 1024x768 "${OUT}/${FILE}-l.${EXT}"
convert "${FILENAME}" -resize 2048x1024 "${OUT}/${FILE}-x.${EXT}"
echo "Uploading"
find ${OUT} -name "${FILE}*" -print0 | xargs -0 -I upload ${S3CMD} put upload s3://${S3BUCKET}/ --acl-public
${S3CMD} put "${FILENAME}" s3://${S3BUCKET}/ --acl-public
mv "${FILENAME}" ${SAVEUPLOADED}/
UPLOADED=TRUE
fi
done
if [[ ${UPLOADED} = TRUE ]]; then
echo "Pics have been uploaded..."
echo "<html><head><title>Blog Pics</title></head><body><ul>" > ${DIR}
${S3CMD} ls s3://${S3BUCKET}/ | sort -r | cut -c 69- | xargs -I filename echo "<li><a href='http://${S3BUCKET}/filename'>filename</a>" >> ${DIR}
echo "</ul></body></html>" >> ${DIR}
fi
|
This requires ImageMagick to be installed for the convert command. Once I have the script written I set up crontab to run the script every minute.