建立檔案欄位以將文件、圖片和其他檔案附加到記錄上
檔案自訂欄位允許您將多個檔案附加到記錄上。檔案安全地儲存在 AWS S3 中,並具有全面的元資料追蹤、檔案類型驗證和適當的存取控制。
基本範例
建立一個簡單的檔案欄位:
mutation CreateFileField {
createCustomField(input: {
name: "Attachments"
type: FILE
}) {
id
name
type
}
}
進階範例
建立一個帶有描述的檔案欄位:
mutation CreateDetailedFileField {
createCustomField(input: {
name: "Project Documents"
type: FILE
description: "Upload project-related documents, images, and files"
}) {
id
name
type
description
}
}
輸入參數
CreateCustomFieldInput
| 參數 | 類型 | 必填 | 描述 |
|---|---|---|---|
name |
String! | ✅ 是 | 檔案欄位的顯示名稱 |
type |
CustomFieldType! | ✅ 是 | 必須是 FILE |
description |
String | 否 | 顯示給使用者的幫助文字 |
注意:自訂欄位會根據使用者當前的專案上下文自動與專案關聯。無需 projectId 參數。
檔案上傳過程
步驟 1:上傳檔案
首先,上傳檔案以獲取檔案 UID:
mutation UploadFile {
uploadFile(input: {
file: $file # File upload variable
companyId: "company_123"
projectId: "proj_123"
}) {
id
uid
name
size
type
extension
status
}
}
步驟 2:將檔案附加到記錄
然後將上傳的檔案附加到記錄上:
mutation AttachFileToRecord {
createTodoCustomFieldFile(input: {
todoId: "todo_123"
customFieldId: "file_field_456"
fileUid: "file_uid_from_upload"
}) {
id
file {
uid
name
size
type
}
}
}
管理檔案附件
添加單個檔案
mutation AddFileToField {
createTodoCustomFieldFile(input: {
todoId: "todo_123"
customFieldId: "field_456"
fileUid: "file_uid_789"
}) {
id
position
file {
uid
name
size
type
extension
}
}
}
移除檔案
mutation RemoveFileFromField {
deleteTodoCustomFieldFile(input: {
todoId: "todo_123"
customFieldId: "field_456"
fileUid: "file_uid_789"
})
}
批量檔案操作
使用 customFieldOptionIds 同時更新多個檔案:
mutation SetMultipleFiles {
setTodoCustomField(input: {
todoId: "todo_123"
customFieldId: "field_456"
customFieldOptionIds: ["file_uid_1", "file_uid_2", "file_uid_3"]
})
}
檔案上傳輸入參數
UploadFileInput
| 參數 | 類型 | 必填 | 描述 |
|---|---|---|---|
file |
Upload! | ✅ 是 | 要上傳的檔案 |
companyId |
String! | ✅ 是 | 用於檔案儲存的公司 ID |
projectId |
String | 否 | 用於專案特定檔案的專案 ID |
檔案管理輸入參數
| 參數 | 類型 | 必填 | 描述 |
|---|---|---|---|
todoId |
String! | ✅ 是 | 記錄的 ID |
customFieldId |
String! | ✅ 是 | 檔案自訂欄位的 ID |
fileUid |
String! | ✅ 是 | 上傳檔案的唯一識別碼 |
檔案儲存和限制
檔案大小限制
| 限制類型 | 大小 |
|---|---|
| Maximum file size | 256MB per file |
| Batch upload limit | 10 files max, 1GB total |
| GraphQL upload limit | 256MB |
支援的檔案類型
圖片
jpg,jpeg,png,gif,bmp,webp,svg,ico,tiff,tif
影片
mp4,avi,mov,wmv,flv,webm,mkv,3gp
音訊
mp3,wav,flac,aac,ogg,wma
文件
pdf,doc,docx,xls,xlsx,ppt,pptx,txt,rtf
壓縮檔
zip,rar,7z,tar,gz
代碼/文本
json,xml,csv,md,yaml,yml
儲存架構
- 儲存:AWS S3,具有組織的資料夾結構
- 路徑格式:
companies/{companySlug}/projects/{projectSlug}/uploads/{year}/{month}/{username}/{fileUid}_{filename} - 安全性:簽名 URL 以安全訪問
- 備份:自動 S3 冗餘
回應欄位
檔案回應
| 欄位 | 類型 | 描述 |
|---|---|---|
id |
ID! | 資料庫 ID |
uid |
String! | 唯一檔案識別碼 |
name |
String! | 原始檔名 |
size |
Float! | 檔案大小(以位元組為單位) |
type |
String! | MIME 類型 |
extension |
String! | 檔案擴展名 |
status |
FileStatus | PENDING 或 CONFIRMED(可為空) |
shared |
Boolean! | 檔案是否共享 |
createdAt |
DateTime! | 上傳時間戳記 |
TodoCustomFieldFile 回應
| 欄位 | 類型 | 描述 |
|---|---|---|
id |
ID! | 交接記錄 ID |
uid |
String! | 唯一識別碼 |
position |
Float! | 顯示順序 |
file |
File! | 關聯檔案物件 |
todoCustomField |
TodoCustomField! | 父自訂欄位 |
createdAt |
DateTime! | 附加檔案的時間 |
使用檔案創建記錄
在創建記錄時,您可以使用其 UID 附加檔案:
mutation CreateRecordWithFiles {
createTodo(input: {
title: "Project deliverables"
todoListId: "list_123"
customFields: [{
customFieldId: "file_field_id"
customFieldOptionIds: ["file_uid_1", "file_uid_2"]
}]
}) {
id
title
customFields {
id
customField {
name
type
}
todoCustomFieldFiles {
id
position
file {
uid
name
size
type
}
}
}
}
}
檔案驗證和安全性
上傳驗證
- MIME 類型檢查:驗證是否符合允許的類型
- 檔案擴展名驗證:用於
application/octet-stream的備用 - 大小限制:在上傳時強制執行
- 檔名清理:移除特殊字符
存取控制
- 上傳權限:需要專案/公司成員資格
- 檔案關聯:ADMIN、OWNER、MEMBER、CLIENT 角色
- 檔案存取:繼承自專案/公司權限
- 安全 URL:時間限制的簽名 URL 用於檔案存取
所需權限
| 行動 | 所需權限 |
|---|---|
| Create file field | OWNER or ADMIN project-level role |
| Update file field | OWNER or ADMIN project-level role |
| Upload files | Project or company membership |
| Attach files | ADMIN, OWNER, MEMBER, or CLIENT role |
| View files | Standard record view permissions |
| Delete files | Same as attach permissions |
錯誤回應
檔案過大
{
"errors": [{
"message": "File \"filename.pdf\": Size exceeds maximum limit of 256MB",
"extensions": {
"code": "BAD_USER_INPUT"
}
}]
}
檔案未找到
{
"errors": [{
"message": "File not found",
"extensions": {
"code": "FILE_NOT_FOUND"
}
}]
}
欄位未找到
{
"errors": [{
"message": "Custom field not found",
"extensions": {
"code": "CUSTOM_FIELD_NOT_FOUND"
}
}]
}
最佳實踐
檔案管理
- 在附加到記錄之前上傳檔案
- 使用描述性檔名
- 按專案/目的組織檔案
- 定期清理未使用的檔案
性能
- 盡可能批量上傳檔案
- 為內容類型使用適當的檔案格式
- 在上傳之前壓縮大型檔案
- 考慮檔案預覽需求
安全性
- 驗證檔案內容,而不僅僅是擴展名
- 對上傳的檔案進行病毒掃描
- 實施適當的存取控制
- 監控檔案上傳模式
常見用例
-
文件管理
- 專案規範
- 合同和協議
- 會議記錄和簡報
- 技術文檔
-
資產管理
- 設計檔案和模型
- 品牌資產和標誌
- 行銷材料
- 產品圖片
-
合規和記錄
- 法律文件
- 審計記錄
- 證書和許可證
- 財務記錄
-
協作
- 共享資源
- 版本控制的文件
- 反饋和註解
- 參考材料
整合功能
與自動化
- 當檔案被添加/移除時觸發動作
- 根據類型或元資料處理檔案
- 發送檔案變更的通知
- 根據條件歸檔檔案
與封面圖片
- 使用檔案欄位作為封面圖片來源
- 自動圖像處理和縮略圖
- 當檔案變更時動態更新封面
與查詢
- 從其他記錄引用檔案
- 聚合檔案數量和大小
- 根據檔案元資料查找記錄
- 交叉引用檔案附件
限制
- 每個檔案最大 256MB
- 依賴於 S3 可用性
- 無內建檔案版本控制
- 無自動檔案轉換
- 有限的檔案預覽能力
- 無實時協作編輯