TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南
TechMoon 科技月球
WordPress、SEO 與 AI 工具實測指南

PocketChest 是開源的取件碼傳檔工具,自架在 Cloudflare 免費方案就能跑,收件人開網頁輸入六位碼就能下載。實測兩條上傳路徑都能逐位元組取回,200GB 宣稱其實是 R2 平台上限乘出來的數字,免費方案實際儲存額度是 10GB。
用 AI 摘要這篇文章:
先講結論:PocketChest 是一套可以真的跑起來的開源取件碼傳檔工具,我把原始碼抓下來、在 Cloudflare 的本地模擬環境跑完整套流程,不管走一般上傳還是大檔分片路徑,對方輸入六位取件碼後拿到的檔案,都與上傳時逐位元組相同。它兌現的核心價值很明確:檔案櫃架在你自己的 Cloudflare 帳號裡,收件的人不需要註冊、不需要裝任何東西,打開網頁輸入六個字元就能下載。不過宣稱的「200GB 大檔支援」需要看清楚來源,那是把 Cloudflare R2 的平台上限乘出來的數字,不是程式寫死的規格,免費方案的實際儲存額度也只有 10GB。
PocketChest 在 GitHub 上以 MIT 授權公開,是一個 2025 年 8 月出現的專案:後端跑在 Cloudflare Workers 上,用 D1 資料庫存詮釋資料、R2 物件儲存放檔案本體,前端是部署在 Cloudflare Pages 的 Next.js 頁面。整個設計鎖定「私人部署」這個定位,上傳端可以掛 TOTP 兩步驟驗證,只讓拿得到動態密碼的自己人放檔案,取件端則維持最低門檻。一次上傳的檔案與文字會打包成一個它稱為 chest 的櫃子,繫結一組六位取件碼,把碼交給對方就等同把鑰匙交出去。
實際把它跑起來的第一件事,是照著部署文件把後端的 D1 資料表建好、給 R2 儲存綁定一個名字,再補上一組用來簽發權杖的密鑰。這裡有個值得記下的細節:那組密鑰如果漏了沒設,服務照常啟動,等到有人建立新櫃子時才回一個伺服器錯誤,錯誤訊息提到金鑰長度為零。第一次自架的人如果照著文件順序走通常不會踩到,但跳著讀的人會在這裡卡一下。
一般上傳路徑的測試內容是三個項目:一個 74 位元組的文字檔、一個刻意命名的假執行檔、一段直接貼上的文字。上傳頁把檔案和文字當成同一個櫃子的內容一起處理,檔案會顯示大小,文字可以直接輸入,到期日有五個選項可選,選好後按產生分享碼。三個項目一起送出後,系統回給我一組六位碼,到期日選七天。接著用這組碼走取件流程,介面列出櫃子裡的三個項目,每個項目各自掛一顆下載按鈕,文字檔下載回來的雜湊值與上傳前完全相同,貼上的文字也是一字不差,取件頁還會標示這個櫃子的到期日。那個假執行檔同樣被完整收進櫃子,這一點後面談輸入限制時會再回來。

下載這端的設計對收件人很體貼:取件時伺服器發出一張存取權杖,下載連結直接把權杖帶在網址參數裡,所以收件人就是開網頁、輸碼、點檔案,不用登入也不用裝東西,手機瀏覽器同樣吃得下這套流程。權杖的效期跟著櫃子的期限走,檔案到期前,同一組碼可以重複來取,沒有次數限制,這對「客戶端很多人都要下載同一份東西」的場景很實用,但也代表碼外流就是全部外流,沒有補救機制,只能等它到期。

大檔走的是另一條分片路徑。前端把超過 20MB 的檔案切成一片一片,逐片上傳到 R2 的多段上傳介面,最後再合併。我用一個 12MB 的隨機二進位檔切成兩段六百萬位元組測試,合併完成後拿到第二組取件碼,這次到期日選了永久,系統回傳的到期欄位是空值,代表這個櫃子不會被自動清理。下載回來的檔案與原始檔比對雜湊,同樣一致。分片路徑還藏著一個平台級的地板:我先用三加二百萬位元組的切法嘗試,R2 直接拒絕,回覆說提議的上傳小於最小允許的物件大小,也就是除了最後一片,每片至少要 5MiB。官方前端用 20MB 切片,正好不會碰到這條線,但若想自己改小切片省流量,改得太小就會撞上。合併這步也有把關:我第一次用假的分片識別碼湊合著送,R2 拒絕完成,要求每個分片附上上傳時回傳的真識別碼,這代表分片內容在合併前有被逐片核對,不是送個清單就能拼出一個檔案。
README 上寫著支援最大 200GB 的單檔,這個數字在原始碼裡找不到對應的檢查。它的實際來源是一條乘法:後端限制分片編號最多一萬,這同時是 R2 多段上傳的平台上限,前端固定用 20MB 當切片大小,一萬段乘下來大約就是 200GB 的量級。換句話說,這是「平台允許多少」推導出來的上限,不是工具自己畫的線;把切片改成 5GiB,同樣的程式理論上能碰到更大的量級,反正 R2 單一物件的上限是 5TB 級。反過來說,整份程式碼裡沒有任何檔案大小或類型的限制,上傳欄位連副檔名過濾都沒有,我丟進去的假執行檔就是直接被收下的證明。README 另外寫了輸入校驗會限制檔案類型與大小,這句與原始碼的現實對不上,自架的人要自己認知這件事。
真正的約束來自 Cloudflare 的方案額度,而不是這套程式。R2 的免費額度每個月給 10GB 儲存量,也就是說免費帳號連一個 200GB 的檔案都放不進去,要兌現大檔承諾得先升級付費 R2,每 GB 每月 0.015 美元,放一個 200GB 檔案一個月就是 3 美元起跳。另一側是請求本身:Cloudflare 免費帳號對單一請求的內容上限是 100MB,這正是分片設計必須存在的原因,檔案再大,單次請求也不能超過這條線,只能拆著送。免費的 Workers 每個請求還有 10 毫秒的 CPU 時間限制,對這種把串流直接轉手丟給 R2 的寫法影響不大,但代表它本來就不是拿來做重加工的。把這些數字放在一起看,這個工具在免費方案上的實際位置是「總容量 10GB 級的私人檔案櫃」,若只是收發文件、照片、簡報這類日常體積,額度綽綽有餘;想把它當大檔中繼站,帳單要先準備好。
PocketChest 的 TOTP 兩步驟驗證預設為開啟,但它保護的是「放檔案」這一端。部署時用附帶的腳本產生金鑰,可以一次產多組給不同的人,金鑰串進 1Password 或 Google Authenticator 這類驗證器之後,上傳者要先輸入六位數動態密碼才能建立新櫃子。實務上這份金鑰清單就是你的使用者名冊:拿得到金鑰的人才能放檔案,移除某個人的存取權,就是重新產一組清單部署上去。官方文件的說法也直言,這套驗證做起來步驟不少,因為它本來就是為私人部署與受控的存取對象設計的。取件端則完全是另一回事:查詢一組取件碼不需要任何第二因子,只要碼對了,伺服器就發給你一張有效期跟著櫃子走的存取權杖,拿著權杖就能下載裡面的所有檔案。
取件碼本身的強度值得攤開來看。字元集是 35 個:英文字母拿掉了容易和零混淆的 O,加上數字,六位數的組合數大約 18.4 億。不過產生器用的亂數函式屬於非密碼學等級,同一份原始碼裡,TOTP 金鑰的產生用的是密碼學等級的隨機來源,兩者放在一起對比就顯得取件碼這環沒有跟上。搭配另外兩個事實:取件介面沒有嘗試次數限制,跨來源請求的政策也是全開。對私人部署來說,短到期日加 TOTP 上傳門禁已經擋掉絕大多數風險,但若檔案真的敏感,這個強度要自己再評估。順帶一提,這不是我第一次在同類工具裡看到非加密亂數產生取件碼,先前實測的 file-transfer-go 也是類似做法,這類小型自架工具普遍把賭注押在「碼空間夠大」上。
櫃子的壽命有五個選項:一天、三天、七天、十五天,或永久。清理靠一個每小時觸發的排程:過期的櫃子連同 R2 裡的檔案本體一起刪掉,建立了卻從未完成上傳的櫃子,超過 48 小時也會被掃走,這個時限刻意對齊分片權杖的 48 小時有效期。到期之後的行為很乾脆:查詢那組取件碼會直接回應找不到或已過期,不會有寬限期,所以重要的櫃子寧可選長一點的期限,也不要賭它在對方來拿之前剛好被清掉。永久是其中最需要想清楚再選的:永久櫃子的到期欄位是空值,排程永遠不會碰它,檔案就一直待在你的 R2 裡佔額度、計費用。權杖的設計分三層,上傳權杖 24 小時,分片權杖 48 小時,取件權杖跟著櫃子的到期日走,唯一例外是永久櫃,簽出來的權杖一年後到期,不過重新輸一次碼就會拿到新的,所以收件人在檔案到期前隨時可以回來再載一次,同一組碼能重複下載,沒有次數上限。
檔案在儲存端的面貌也值得交代:每個檔案在 R2 裡的鍵值是兩組流水號的組合,不保留原本的資料夾結構,原始檔名、類型、大小這些資訊只存在 D1 資料庫的兩張表裡,刪除櫃子時兩邊一起清。對自架者的意義是雙面的:好處是儲存桶裡看不到任何可直接解讀的檔名,儲存端憑證萬一外洩也多一層模糊;代價是沒有檔案總管那種瀏覽方式,想找「去年那個櫃子」只能靠取件碼或直接去資料庫查,工具本身沒有提供管理介面。
用取件碼傳檔的工具可以粗分三種架構,各自回答「檔案放在誰那裡」這個問題的方式不同。一端是點對點直連:兩邊瀏覽器直接拉一條通道,檔案不落地,先前的 FileSync 與前面提到的 file-transfer-go 都屬於這類,好處是傳輸路徑最短,代價是雙方上線的時間要對得上,網路環境不配合時還會退回中繼。另一端是別人部署好的保管櫃,例如 取文件 這類站,你直接用,但檔案落在站方的儲存、規則站方說了算,保存期限與審計全看營運者,等免費額度或服務政策一變,使用體驗就跟著變。PocketChest 走的是中間那條路:保管櫃在你自己的雲端帳號裡,檔案本體只進你自己的 R2,資料庫裡也只留檔名與大小這類詮釋資料,信任問題從「你信不信這家服務」變成「你信不信 Cloudflare 加上你自己的設定」。三種架構沒有誰淘汰誰,看你要的是全程不落地的直傳、立刻能用的公共服務,還是可控制的私有空間。
自架保管櫃這條路的另一個特徵是非同步:上傳的人先把櫃子放好,收件的人任何時間來取都行,不需要兩邊同時開著頁面。對收件方的體驗也最輕,開網頁、輸六碼、下載,結束。要付出的代價是這套東西要自己架、自己養,接下來就談這件事。
部署清單不算短但都是標準動作:後端部署成一個 Worker,建一個 D1 資料庫並匯入它附的建表腳本,開一個 R2 儲存桶,設定簽章密鑰,若要開 TOTP 再跑金鑰產生器;前端另部署成 Pages 專案,指回後端網址。Cloudflare 的免費層就能全部跑完。因為前後端是兩個獨立專案,會拿到兩個各自獨立的網址,後端對跨來源請求的政策是全開,等於任何網頁都能直接呼叫這套 API;預設的 TOTP 門禁剛好把這個缺口擋住,但若為了開放親友自由上傳而把 TOTP 關掉,就要意識到你的 API 是對全世界敞開的,別人可以把你的 R2 額度當免費空間用。兩個環境限制先記著:Workers 的預設網域在中國大陸連不上,官方文件明說要給對岸收件人使用就得綁自己的網域,部署文件裡也提醒了這點;介面本身是英文的,沒有中文語系,到期選項之類的字樣都是英文原文。
專案狀態也要用對心態看。全部的開發集中在 2025 年 8 月中到 9 月初的三週內,一共八筆 commit,之後主要分支就凍結到現在,沒有發過正式版本;四百多顆星與七十多個 fork,commit 紀錄看得出作者在這三週內反覆琢磨部署文件與取件碼的細節,連容易看錯的字元都拿掉了,期間開出的四個 issue 也全數回覆關閉。對依賴活躍維護的人來說,凍結近一年是警訊;但換個角度,它的架構是無狀態的伺服器函式加上兩個託管服務,沒有長駐程序要顧,MIT 授權也允許任何人接手改。它更接近「一次寫完、能用就好」的作品,而不是持續演進的產品。
收攏成判斷:已經有 Cloudflare 帳號、想給小圈子一個收檔案的地方、在乎檔案落在誰的儲存裡的人,這套工具的投資報酬率不錯,免費方案就撐得起每天用的量級,取件端的零門檻對非技術的收件人特別友善。想像幾個具體場面:客戶要把一批原始檔交給你、社團要收成員的作品、家人要把手機裡的影片傳給你,這些時候給對方一組六位碼,比教對方註冊雲端硬碟再設分享權限省事得多,而且檔案始終在你自己的額度裡,對方拿完、期限一到就自動收乾淨。反過來,要傳 GB 級大檔、需要中文介面,或期待有人持續修問題的場景,它不是好選擇,第一種要認真考慮帳單,後兩種直接看別的工具比較快。