指南

如何為應用程式加入檔案上傳:儲存空間、限制與安全

要為應用程式加入檔案上傳,請把檔案存放在物件儲存空間(儲存桶)中,而不是伺服器磁碟或資料庫內;並在資料庫中儲存一筆小紀錄,包括檔案的鍵、名稱、大小、類型和擁有者。請在伺服器端檢查檔案大小和類型;事先決定檔案是公開(例如產品相片)還是私人(例如發票);並且只有在確認查詢者的身分之後,才提供私人檔案。在 AI 應用程式生成工具中,一句提示詞便可描述上傳功能;重要的是測試檔案在重新部署後是否仍然存在,以及錯誤的人是否無法開啟它們。

先決定你需要哪種上傳

建造之前,先回答三個問題:

  1. **什麼檔案?**個人頭像、產品圖片、PDF、試算表、音訊、影片。這決定了類型與大小限制。
  2. **誰可以查看?**所有人(公開的相簿),還是只有上傳者和管理員(合約、身分證明文件、客戶檔案)。
  3. **上傳之後會怎樣?**只是儲存、顯示預覽、調整圖片大小,還是讀取內容。

公開圖片與私人文件需要不同的設定,因此要先確定這一點。

檔案應存放在哪裡

選擇運作方式適合須留意
物件儲存空間(儲存桶)檔案存放在專為此而設的服務中;你的資料庫保存鍵或 URL幾乎所有應用程式必須正確設定存取規則
平台提供的儲存空間你的 AI 生成工具或主機為你啟用一個儲存桶建立於該平台之上的應用程式限制和收費跟隨該平台
伺服器磁碟檔案寫入應用程式伺服器的檔案系統只適合本地開發重新啟動或重新部署後常會被清除
資料庫之內檔案的位元組存放在資料表中幾乎從不適用令資料庫膨脹,拖慢備份
第三方上傳元件由託管的上傳服務處理整個流程大型媒體、圖片轉換另一個供應商、另一個帳戶、另一張帳單

對大多數應用程式來說,物件儲存空間加上一筆資料庫紀錄,是正確的做法。資料庫的那一列是你的應用程式查詢的對象(「顯示此用戶的文件」);儲存桶只負責存放檔案的位元組。

公開檔案與私人檔案

  • 公開檔案(產品照片、部落格圖片、頭像)可以透過公開 URL 提供。任何擁有連結的人都能開啟,這對此類內容來說沒有問題。
  • 私人檔案(發票、合約、醫療或身分證明文件、交付予客戶的成果)絕不可以有容易猜中的公開 URL。伺服器會先檢查已登入的用戶是否擁有該檔案或有權查看,然後再把檔案串流回傳,或回傳一個簽署 URL(只在短時間內有效的連結)。

一個常見而嚴重的錯誤,是把私人檔案存放在公開儲存桶中,並使用可預測的檔案名稱。任何人只要猜到 /uploads/invoice-102.pdf,就能看到別人的發票。

例子提示詞

公開圖片上傳:

讓管理員為每件產品上傳最多 5 張產品相片。每張接受 JPG、PNG 和 WebP,大小上限為 5 MB。把檔案存放在檔案儲存空間,並把每個檔案的鍵、大小和排序儲存到 product_images 資料表,顯示縮圖及移除按鈕。在伺服器端驗證類型和大小,而不只是在瀏覽器中驗證。

私人文件上傳:

為已登入的客戶加入「文件」頁面。客戶可以上傳最大 20 MB 的 PDF。檔案是私人的:把它們存放在檔案儲存空間,並把擁有者 ID、原始檔名、大小和上傳時間儲存到 documents 資料表。只允許擁有者和管理員下載。下載必須經過一個伺服器路由,並在該路由中檢查權限。切勿為這些檔案提供公開 URL。

後續的實用要求:

上傳期間顯示進度列;如果檔案太大或類型錯誤,顯示清楚的錯誤訊息。

當文件資料列被刪除時,同時刪除已儲存的檔案。

逐步進行

  1. **為每個上傳欄位定下類型與大小限制。**要具體:「最大 20 MB 的 PDF」,而不是「文件」。
  2. **啟用儲存空間。**在 AI 生成工具中,要求上傳功能,它便會替你設定儲存空間;其他平台則需要建立儲存桶,並把其憑證作為伺服器端機密加入。
  3. 建立一張資料表儲存檔案紀錄:ID、擁有者、儲存鍵、原始名稱、類型、大小、建立時間。
  4. 在伺服器端建立上傳路由:檢查用戶是否已登入,檢查類型和大小,生成安全的儲存鍵(不要使用用戶提供的檔名),儲存檔案,然後插入紀錄。
  5. 建立下載或顯示的路徑:公開檔案使用公開 URL;私人檔案則使用經過權限檢查的路由或簽署 URL。
  6. 建立介面:檔案選擇器、如有需要可加入拖放功能、進度、預覽和錯誤訊息。
  7. 處理刪除,確保移除一筆紀錄時,也會移除已儲存的檔案。
  8. 測試:上傳、重新載入、重新部署或發布,然後確認檔案仍能載入。接着以另一位用戶登入,嘗試開啟第一位用戶的私人檔案。

常見錯誤

  • **把上傳的檔案寫入伺服器磁碟。**在開發環境中運作正常,但重新啟動或重新部署後檔案就會消失。
  • **信任瀏覽器的檢查。**檔案輸入欄位的「accept」設定只是提示,不是保安措施。請在伺服器端檢查類型和大小。
  • **以用戶的檔名作為儲存鍵。**名稱可能重複,也可能包含奇怪的字元。請生成獨一無二的鍵,並另外儲存原始名稱。
  • **把私人檔案放在公開儲存桶中。**見上文;這是最常見、最容易成為新聞的漏洞。
  • **允許任何檔案類型。**在某些設定中,從你的網域提供的 HTML 或 SVG 檔案可能會執行腳本。只接受你需要的類型。
  • **沒有大小限制。**一個巨大的上傳可能耗盡你的儲存配額,或令請求逾時。
  • **孤立的檔案。**刪除了資料庫的資料列,卻沒有刪除檔案,會慢慢填滿你要付費的儲存空間。
  • **忘記手機。**手機相片可能很大,而且格式可能是 HEIC;請決定要接受還是轉換。

檢查清單

  • 檔案存放在物件儲存空間,而不是伺服器磁碟或資料庫中
  • 每個檔案都有資料庫紀錄,包括擁有者、鍵、名稱、類型和大小
  • 類型和大小在伺服器端檢查
  • 儲存鍵由系統生成,而不是取自檔名
  • 私人檔案只會在通過權限檢查之後才提供
  • 其他用戶即使有連結也無法開啟你的私人檔案
  • 刪除紀錄時也會刪除檔案
  • 發布或重新部署之後,檔案仍能載入
  • 上傳錯誤會清楚顯示,包括在手機上

在 Mythex 上傳檔案

當應用程式需要上傳功能時,Mythex 可以為專案自動啟用檔案儲存空間,因此你無須手動設定儲存桶。你也可以在對話中輸入 /storage。它在免費及 Pro 方案均可使用,免費方案的上限為 1 GB;你可以在 Settings → Storage 查看其狀態。

文件明確指出,已發布的託管環境並不是可持久使用的本地檔案系統,因此請要求代理使用平台的儲存空間,而不是把檔案存到磁碟。儲存的檔案及下載會從你的點數餘額扣除,按大小及下載次數計算;Pro 方案的收費為免費方案的一半。詳見文件中的檔案儲存空間。

上傳功能通常與資料庫(儲存檔案紀錄)及登入(保護私人檔案)一同使用。如果你正在建立一個讓客戶交換文件的平台,請參閱如何建立客戶入口網站,並在正式推出前檢視安全檢查清單。

常見問題

上傳的檔案應存放在哪裡?

應存放在物件儲存空間(一種專為檔案而設的服務,通常稱為儲存桶),而不是應用程式伺服器的磁碟,也不是資料庫之內。你的資料庫只需保存檔案的鍵或 URL,以及名稱、大小和擁有者等詳細資料。

為什麼我發布或重新部署之後,上傳的檔案會消失?

大多數託管平台並不保留可持久使用的本地磁碟:應用程式重新啟動或重新部署時,寫入其磁碟的檔案都會遺失。請改為把上傳的檔案儲存到物件儲存空間。

如何讓上傳的檔案保持私密?

不要讓檔案可被公開讀取。由伺服器檢查已登入的用戶是否有權查看該檔案,然後傳送檔案,或回傳一個短期有效的簽署連結。

Mythex 支援檔案上傳嗎?

支援。當應用程式需要上傳功能時,Mythex 可以為專案啟用檔案儲存,免費及 Pro 方案均可使用,免費方案的上限為 1 GB。你可以向代理要求上傳功能,或輸入 /storage。

Mythex · Pricing · 用 AI 建造任何嘢 · 網站及應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(台灣)