Upload files through API
API 를 이용해서 nextcloud에 디렉토리를 생성하고 파일을 업로드할 수 있다.
지금 운영하고 있는 nextcloud는 서버 한 대에 디스크도 전부 한 장씩 싱글로 돌아가고 있지만 클라이언트가 여러 대 있기 때문에 굳이 데이터에 대한 백업이나 가용성을 설정할 필요는 없다. 대신 웹서버랑 메타데이터에 대한 백업은 별도로 필요한데 이 API를 이용하면 웹서버 덤프를 데이터화 시켜서 nextcloud에 저장할 수 있다.
Accessing files using cURL
get the properties of files
다음 API를 이용해서 특정 경로의 사용량이나 최종 수정 일자에 대한 정보를 얻어올 수 있다.
curl -X PROPFIND -H "Depth: 1" -u user:pass https://example.com/nextcloud/remote.php/dav/files/USERNAME/
create a folder
다음과 같이 API를 이용해서 디렉토리를 생성하거나
curl -u user:pass -X MKCOL "https://example.com/nextcloud/remote.php/dav/files/USERNAME/$(date '+%d-%b-%Y')"
upload a file
파일을 업로드할 수 있다.
curl -u user:pass -T error.log "https://example.com/nextcloud/remote.php/dav/files/USERNAME/$(date '+%d-%b-%Y')/error.log"
Sample bash script
NC_HOSTNAME="https://example.com/nextcloud"
NC_USERNAME="oboki"
NC_PASSWORD="password"
UPLOAD_FILE="www.tar.gz.$(date '+%Y%m%d%H%M%S')"
FILE_DIR=$HOME
NC_DIR="backups/example.com/webserver/$(date '+%Y-%m-%d')"
curl -s -u $NC_USERNAME:$NC_PASSWORD -X PROPFIND -H "Depth: 1" \
"${NC_HOSTNAME}/remote.php/dav/files/$NC_USERNAME/$NC_DIR" | grep "200 OK"
RES=$(echo $?)
echo $RES
if [ $RES -eq 0 ]; then
echo "Target directory already exist."
else
curl -s -u $NC_USERNAME:$NC_PASSWORD -X MKCOL \
"${NC_HOSTNAME}/remote.php/dav/files/$NC_USERNAME/$NC_DIR" | grep "\S"
RES=$(echo $?)
if [ $RES -eq 0 ]; then
echo "Failed to create target directory"
exit 1
fi
fi
cd /var/
tar -czf ${FILE_DIR}/${UPLOAD_FILE} www
RES=$(echo $?)
echo $RES
if [ $RES -eq 0 ]; then
curl -s -u $NC_USERNAME:$NC_PASSWORD -T $FILE_DIR/$UPLOAD_FILE \
"${NC_HOSTNAME}/remote.php/dav/files/$NC_USERNAME/$NC_DIR/$UPLOAD_FILE" | grep "\S"
RES=$(echo $?)
if [ $RES -eq 0 ]; then
echo "Failed to upload"
exit 1
fi
fi
rm $FILE_DIR/$UPLOAD_FILE