iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0

今天來透過 SFTPGO 的 Event 來做到類似資料處理的功能
以使用者會想把壓縮過的檔案上傳到 OVM 的情境來說
我們目前只有提供直接上傳音樂檔而已 SFTPGO 本身也不支援資料夾上傳
所以當要一次上傳一個專輯時就只能一個一個上傳似乎有點麻煩
所以就透過在壓縮檔指定專輯名稱 裡面塞滿專輯的音樂檔
透過上傳到 SFTPGO 的另一個 Folder 透過 Event 觸發一個 Pipeline 來處理檔案
就能做到一次上傳一整個專輯的設定了 就來看看該如何實作這個功能吧

SFTPGO 設定

In SFTPGO shell

這邊先透過 docker exec 進入 Container 的 Shell 來進行控制

docker exec -it -u root sftpgo sh

要建立暫時存放 ZIP 的 Folder 還有放 Shell 的 Folder
並且將權限轉給 sftpgo 再透過 vi 來寫要用到的 Shell Script

mkdir /tmp/unzip_pipeline
mkdir /shell
chown sftpgo:sftpgo /shell
chown sftpgo:sftpgo /tmp/unzip_pipeline
vi /shell/pipeline_unzip.bash

Shell Script

來寫一下處理解壓縮和刪除 ZIP 檔的 Shell Script
這邊透過暴力處理檔案名稱==

#!/bin/sh
INPUT_PATH="/tmp/unzip_pipeline"
OBJECT_NAME=$1
IFS="."

if [ -z $OBJECT_NAME ]; then
  echo "Error: No name on input"
  exit 1
fi

if [[ $FILE_NAME != *.zip ]]; then
  echo "Error: This file isn't ZIP"
  exit 1
fi

set -- $OBJECT_NAME
for part; do
  FILE_NAME=$part
  break
done

mkdir /navidrome-upload/$FILE_NAME
unzip "$INPUT_PATH/$OBJECT_NAME" -d /navidrome-upload/$FILE_NAME/
rm "$INPUT_PATH/$OBJECT_NAME"

Folders

來新增一個暫時存放 ZIP 檔的儲存空間
這邊實體路徑使用剛剛在 /tmp 創出來的 Folder
https://ithelp.ithome.com.tw/upload/images/20231013/20162773YZJNIRMbx5.png

Event Action

這邊來設定 Event 觸發時要執行的事件
這邊透過 Type Command 來讓他觸發 Shell Script
並透過 Arguments 來傳入 upload 的檔案名稱給 Shell Script 使用
https://ithelp.ithome.com.tw/upload/images/20231013/20162773VXUjHGA4J6.png

Event Rule

這邊來設定甚麼條件下會觸發 Event
這邊透過 Filesystem 發生 Upload 且
檔案是在 Virtual Folder 路徑 /upload-zip 檔案名稱是 .zip 結尾的會觸發剛剛寫好的 Event Action
https://ithelp.ithome.com.tw/upload/images/20231013/20162773oyXKg2R6vu.png
https://ithelp.ithome.com.tw/upload/images/20231013/20162773DxfZ7x03Pu.png

Group

接著在 Navidrome 的 Group 把剛剛新增的 Folder 加上去
https://ithelp.ithome.com.tw/upload/images/20231013/20162773RxtMTSn2Uu.png
接著可以透過 ACL 來限制一下 User 可以上傳那些檔案上去
這邊設定只有 .zip 副檔名的檔案可以上傳到 /upload-zip 這個 Virtual Folder 上
https://ithelp.ithome.com.tw/upload/images/20231013/201627739iI04jWjxK.png

這樣該設定的東西都設定好了 接下來測試看看

Run 看看

先來 Preview 一下我要傳的檔案
https://ithelp.ithome.com.tw/upload/images/20231013/20162773r10qzHVcPi.png
接著就開始準備上傳 打開另一個 SFTPGO 網頁登入 User
https://ithelp.ithome.com.tw/upload/images/20231013/20162773z7FFjVK9M1.png
點進 /upload-zip 裡面準備上傳
https://ithelp.ithome.com.tw/upload/images/20231013/20162773vdMV2m6mj0.png
上傳後會看到檔案在 /upload-zip 這一個路徑上
但過了 10 秒後按 Reload 就會發現不見了
這是因為我的 Shell Script 最後有指定要 rm 掉上傳的 ZIP 檔
既然不見就表示 Shell Script 有正確執行 那就到 Navidrome 的儲存區看看吧
https://ithelp.ithome.com.tw/upload/images/20231013/20162773Yt9uQqe5LW.png
有了 最後到 Navidrome 看看
https://ithelp.ithome.com.tw/upload/images/20231013/20162773vj0JAttbZx.png
該有的東西都有 也能正常撥放 很棒 下班 高歌離席


上一篇
Day26 SFTPGO 上傳檔案的好朋友 上雲下地都靠他
下一篇
Day28 Grafana Alerting 建立 On Call 好夥伴
系列文
地端建置大雜燴-下從網路線上到Grafana的建置之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言