把檔案放在共用資料夾
套件可以把檔案放在 DSM 共用資料夾,而不是私有的資料資料夾。你在 dsm-package.yaml 宣告這個資料夾。安裝精靈會請管理員選一個既有的共用資料夾(select),或幫你建立一個(create)。之後你的 App 從安裝程式寫入的檔案讀取資料夾名稱。
建立帶有共用資料夾的專案,或把區塊加進既有的 dsm-package.yaml:
synopkgland init -t native-go --shared-folder select my-app| 選項 | 意義 |
|---|---|
--shared-folder select|create | 模式。 |
--shared-folder-name <name> | 要建立的共用資料夾。僅用於 create。 |
--shared-folder-key <key> | 你的 App 使用的鍵。預設為 shared。 |
--shared-folder-permission ro|rw | 套件帳號取得的權限。預設為 rw。 |
在 dsm-package.yaml 中的相同宣告:
install: sharedFolder: # select 或 create mode: select # 你的 App 用來讀取資料夾的名稱 key: media # ro 或 rw:套件帳號需要的權限 permission: rw # 僅 create:要建立的共用資料夾 # name: my-app-data| 欄位 | 規則 |
|---|---|
mode | select 或 create |
key | ^[a-z][a-z0-9_]{0,31}$。不可以 pkgwizard_、synopkg 或 change_ 開頭。 |
permission | ro 或 rw |
name | create 必填,select 不允許。^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$。homes、users、volume1、usbshare1 這類 DSM 系統名稱會被拒絕。 |
install 只接受 sharedFolder。一個套件只宣告一個共用資料夾。
安裝程式會顯示什麼
Section titled “安裝程式會顯示什麼”| 模式 | 安裝精靈 | 升級精靈 |
|---|---|---|
select | 一個步驟,列出 NAS 上的共用資料夾,並附上權限說明。 | 除非管理員勾選變更核取方塊,否則沿用目前的資料夾。 |
create | 說明套件會建立名為 name 的資料夾,並給套件帳號該權限。如果資料夾已存在,就保留它,只設定套件帳號的權限。 | 相同的說明。 |
使用 select 時,DSM 不會讓套件帳號存取在精靈中選的資料夾。安裝後,管理員要開啟控制台 > 共用資料夾,編輯該資料夾,在「權限」>「系統內部使用者」中給套件帳號 ro 或 rw。套件帳號的名稱與套件名稱相同。在那之前,你的 App 會回報該資料夾不可讀取。
使用 create 時,解除安裝套件絕不會刪除共用資料夾或其中的檔案。
安裝程式會在 App 的資料資料夾寫入 config.json。它儲存的是資料夾名稱,不是路徑:
{"schema":1,"shared_folders":{"media":"my-share"}}Go 模板每次都會重新解析儲存空間路徑,因此資料夾搬到另一個儲存空間後仍能運作。用 Config.SharedFolders() 讀取,或用 app.ReadSharedFolders 與 app.ResolveSharedFolder。每個資料夾會回報 key、name、path、exists、readable 與 writable。權限檢查會遵循 DSM ACL。模板也會把同一份清單以 shared_folders 放進 app.status 的回應。如果 config.json 損毀,app.status 會回報 shared_folders_error。
app.status 預設只有管理員可用。若要讓所有已登入的使用者都能用,請在 backend/internal/api/permissions.json 設定 "app.status": "authenticated"。
| 限制 | 值 |
|---|---|
| 每個套件的宣告數 | 1 |
| 鍵 | 1 到 32 個字元 |
| 建立的資料夾名稱 | 1 到 32 個字元 |
init --shared-folder | 僅限 native-go 模板 |
| 套件帳號的權限 | ro 或 rw |
| 症狀或錯誤碼 | 原因 | 解法 |
|---|---|---|
STANDALONE_SHARED_FOLDER_INVALID | 某個欄位違反上表的規則。 | 修正 install.sharedFolder。 |
INIT_SHARED_FOLDER_INVALID | init --shared-folder 的值無效,或模板不是 native-go。 | 修正選項,並使用 -t native-go。 |
readable 或 writable 為 false | 套件帳號對選定的資料夾沒有存取權。 | 在控制台 > 共用資料夾,給套件帳號 ro 或 rw。 |
exists 為 false,且錯誤為 shared folder not found on any volume | 沒有任何儲存空間有該名稱的資料夾。 | 確認該資料夾仍然存在。 |
| 錯誤說名稱對應到多個儲存空間 | 兩個儲存空間各有一個同名資料夾。 | 重新命名其中一個資料夾。 |
所有錯誤碼請見錯誤碼。