[{"data":1,"prerenderedAt":779},["ShallowReactive",2],{"navigation":3,"docs-\u002Fdocs\u002Fguide\u002Fstorage":72,"surround-\u002Fdocs\u002Fguide\u002Fstorage":774},[4],{"title":5,"path":6,"stem":7,"children":8,"page":38},"Docs","\u002Fdocs","docs",[9,39],{"title":10,"path":11,"stem":12,"children":13,"page":38},"Guide","\u002Fdocs\u002Fguide","docs\u002F1.guide",[14,18,22,26,30,34],{"title":15,"path":16,"stem":17},"介绍","\u002Fdocs\u002Fguide\u002Fintroduction","docs\u002F1.guide\u002F1.introduction",{"title":19,"path":20,"stem":21},"快速开始","\u002Fdocs\u002Fguide\u002Fquick-start","docs\u002F1.guide\u002F2.quick-start",{"title":23,"path":24,"stem":25},"配置说明","\u002Fdocs\u002Fguide\u002Fconfiguration","docs\u002F1.guide\u002F3.configuration",{"title":27,"path":28,"stem":29},"存储配置","\u002Fdocs\u002Fguide\u002Fstorage","docs\u002F1.guide\u002F4.storage",{"title":31,"path":32,"stem":33},"生产部署","\u002Fdocs\u002Fguide\u002Fdeployment","docs\u002F1.guide\u002F5.deployment",{"title":35,"path":36,"stem":37},"第三方客户端","\u002Fdocs\u002Fguide\u002Fclients","docs\u002F1.guide\u002F6.clients",false,{"title":40,"path":41,"stem":42,"children":43,"page":38},"Api","\u002Fdocs\u002Fapi","docs\u002F2.api",[44,48,52,56,60,64,68],{"title":45,"path":46,"stem":47},"概述","\u002Fdocs\u002Fapi\u002Foverview","docs\u002F2.api\u002F1.overview",{"title":49,"path":50,"stem":51},"认证","\u002Fdocs\u002Fapi\u002Fauthentication","docs\u002F2.api\u002F2.authentication",{"title":53,"path":54,"stem":55},"文件上传","\u002Fdocs\u002Fapi\u002Fupload","docs\u002F2.api\u002F3.upload",{"title":57,"path":58,"stem":59},"文件管理","\u002Fdocs\u002Fapi\u002Ffiles","docs\u002F2.api\u002F4.files",{"title":61,"path":62,"stem":63},"相册","\u002Fdocs\u002Fapi\u002Falbums","docs\u002F2.api\u002F5.albums",{"title":65,"path":66,"stem":67},"API Token","\u002Fdocs\u002Fapi\u002Ftokens","docs\u002F2.api\u002F6.tokens",{"title":69,"path":70,"stem":71},"管理员 API","\u002Fdocs\u002Fapi\u002Fadmin","docs\u002F2.api\u002F7.admin",{"id":73,"title":27,"body":74,"description":768,"extension":769,"meta":770,"navigation":771,"path":28,"seo":772,"stem":29,"__hash__":773},"docs\u002Fdocs\u002F1.guide\u002F4.storage.md",{"type":75,"value":76,"toc":753},"minimark",[77,81,85,135,138,145,148,193,200,204,208,286,290,397,401,466,476,480,555,567,571,640,643,676,679,686,698,705,708,723,731,734,737,749],[78,79,80],"p",{},"Kite 支持多个存储配置同时存在，并通过「默认存储」标志决定新文件的落盘位置。管理员可在「系统设置 → 存储」中随时添加、切换或删除存储。",[82,83,84],"h2",{"id":84},"存储驱动",[86,87,88,104],"table",{},[89,90,91],"thead",{},[92,93,94,98,101],"tr",{},[95,96,97],"th",{},"Driver",[95,99,100],{},"说明",[95,102,103],{},"典型场景",[105,106,107,122],"tbody",{},[92,108,109,116,119],{},[110,111,112],"td",{},[113,114,115],"code",{},"local",[110,117,118],{},"本地文件系统",[110,120,121],{},"个人实例、内网、冷备份",[92,123,124,129,132],{},[110,125,126],{},[113,127,128],{},"s3",[110,130,131],{},"AWS S3 v2 兼容协议",[110,133,134],{},"阿里云 OSS、腾讯云 COS、Cloudflare R2、MinIO",[82,136,137],{"id":137},"本地存储",[78,139,140,141,144],{},"Kite 首次启动会自动创建一个本地存储，路径为 ",[113,142,143],{},"\u003CdataDir>\u002Fuploads","。通常无需手动配置。",[78,146,147],{},"若需手动新增，在后台填写：",[86,149,150,159],{},[89,151,152],{},[92,153,154,157],{},[95,155,156],{},"字段",[95,158,100],{},[105,160,161,169,177,185],{},[92,162,163,166],{},[110,164,165],{},"名称",[110,167,168],{},"展示用名称，如「本机 SSD」",[92,170,171,173],{},[110,172,97],{},[110,174,175],{},[113,176,115],{},[92,178,179,182],{},[110,180,181],{},"Base Path",[110,183,184],{},"文件存储根目录（绝对路径）",[92,186,187,190],{},[110,188,189],{},"Base URL",[110,191,192],{},"可选，CDN 或反向代理 URL 前缀",[78,194,195,196,199],{},"本地存储的文件通过 ",[113,197,198],{},"GET \u002Fuploads\u002F*"," 直接由 Gin 提供静态服务。",[82,201,203],{"id":202},"s3-兼容存储","S3 兼容存储",[205,206,207],"h3",{"id":207},"通用字段",[86,209,210,218],{},[89,211,212],{},[92,213,214,216],{},[95,215,156],{},[95,217,100],{},[105,219,220,228,243,251,259,267,278],{},[92,221,222,225],{},[110,223,224],{},"Endpoint",[110,226,227],{},"服务端点域名",[92,229,230,233],{},[110,231,232],{},"Region",[110,234,235,236,239,240],{},"区域，如 ",[113,237,238],{},"cn-hangzhou"," \u002F ",[113,241,242],{},"auto",[92,244,245,248],{},[110,246,247],{},"Bucket",[110,249,250],{},"存储桶名称",[92,252,253,256],{},[110,254,255],{},"Access Key ID",[110,257,258],{},"访问密钥 ID",[92,260,261,264],{},[110,262,263],{},"Secret Access Key",[110,265,266],{},"访问密钥 Secret",[92,268,269,271],{},[110,270,189],{},[110,272,273,274,277],{},"可选，CDN 域名（如 ",[113,275,276],{},"https:\u002F\u002Fcdn.example.com","）",[92,279,280,283],{},[110,281,282],{},"Force Path Style",[110,284,285],{},"MinIO 需启用",[205,287,289],{"id":288},"阿里云-oss","阿里云 OSS",[291,292,297],"pre",{"className":293,"code":294,"language":295,"meta":296,"style":296},"language-yaml shiki shiki-themes github-light github-dark","driver: s3\nendpoint: oss-cn-hangzhou.aliyuncs.com\nregion: cn-hangzhou\nbucket: my-kite-bucket\naccess_key_id: LTAI...\nsecret_access_key: ...\nbase_url: https:\u002F\u002Fcdn.example.com   # 可选：绑定 CDN 后填入\nforce_path_style: false\n","yaml","",[113,298,299,316,327,338,349,360,372,386],{"__ignoreMap":296},[300,301,304,308,312],"span",{"class":302,"line":303},"line",1,[300,305,307],{"class":306},"s9eBZ","driver",[300,309,311],{"class":310},"sVt8B",": ",[300,313,315],{"class":314},"sZZnC","s3\n",[300,317,319,322,324],{"class":302,"line":318},2,[300,320,321],{"class":306},"endpoint",[300,323,311],{"class":310},[300,325,326],{"class":314},"oss-cn-hangzhou.aliyuncs.com\n",[300,328,330,333,335],{"class":302,"line":329},3,[300,331,332],{"class":306},"region",[300,334,311],{"class":310},[300,336,337],{"class":314},"cn-hangzhou\n",[300,339,341,344,346],{"class":302,"line":340},4,[300,342,343],{"class":306},"bucket",[300,345,311],{"class":310},[300,347,348],{"class":314},"my-kite-bucket\n",[300,350,352,355,357],{"class":302,"line":351},5,[300,353,354],{"class":306},"access_key_id",[300,356,311],{"class":310},[300,358,359],{"class":314},"LTAI...\n",[300,361,363,366,368],{"class":302,"line":362},6,[300,364,365],{"class":306},"secret_access_key",[300,367,311],{"class":310},[300,369,371],{"class":370},"sj4cs","...\n",[300,373,375,378,380,382],{"class":302,"line":374},7,[300,376,377],{"class":306},"base_url",[300,379,311],{"class":310},[300,381,276],{"class":314},[300,383,385],{"class":384},"sJ8bj","   # 可选：绑定 CDN 后填入\n",[300,387,389,392,394],{"class":302,"line":388},8,[300,390,391],{"class":306},"force_path_style",[300,393,311],{"class":310},[300,395,396],{"class":370},"false\n",[205,398,400],{"id":399},"腾讯云-cos","腾讯云 COS",[291,402,404],{"className":293,"code":403,"language":295,"meta":296,"style":296},"driver: s3\nendpoint: cos.ap-guangzhou.myqcloud.com\nregion: ap-guangzhou\nbucket: my-kite-1300000000\naccess_key_id: AKID...\nsecret_access_key: ...\nforce_path_style: false\n",[113,405,406,414,423,432,441,450,458],{"__ignoreMap":296},[300,407,408,410,412],{"class":302,"line":303},[300,409,307],{"class":306},[300,411,311],{"class":310},[300,413,315],{"class":314},[300,415,416,418,420],{"class":302,"line":318},[300,417,321],{"class":306},[300,419,311],{"class":310},[300,421,422],{"class":314},"cos.ap-guangzhou.myqcloud.com\n",[300,424,425,427,429],{"class":302,"line":329},[300,426,332],{"class":306},[300,428,311],{"class":310},[300,430,431],{"class":314},"ap-guangzhou\n",[300,433,434,436,438],{"class":302,"line":340},[300,435,343],{"class":306},[300,437,311],{"class":310},[300,439,440],{"class":314},"my-kite-1300000000\n",[300,442,443,445,447],{"class":302,"line":351},[300,444,354],{"class":306},[300,446,311],{"class":310},[300,448,449],{"class":314},"AKID...\n",[300,451,452,454,456],{"class":302,"line":362},[300,453,365],{"class":306},[300,455,311],{"class":310},[300,457,371],{"class":370},[300,459,460,462,464],{"class":302,"line":374},[300,461,391],{"class":306},[300,463,311],{"class":310},[300,465,396],{"class":370},[467,468,469],"note",{},[78,470,471,472,475],{},"腾讯云 COS 的 bucket 名称需包含 AppID 后缀（形如 ",[113,473,474],{},"name-1300000000","）。",[205,477,479],{"id":478},"cloudflare-r2","Cloudflare R2",[291,481,483],{"className":293,"code":482,"language":295,"meta":296,"style":296},"driver: s3\nendpoint: https:\u002F\u002F\u003Caccount_id>.r2.cloudflarestorage.com\nregion: auto\nbucket: my-kite-bucket\naccess_key_id: ...\nsecret_access_key: ...\nbase_url: https:\u002F\u002Ffiles.your-domain.com   # 绑定的 R2 自定义域名\nforce_path_style: false\n",[113,484,485,493,502,511,519,527,535,547],{"__ignoreMap":296},[300,486,487,489,491],{"class":302,"line":303},[300,488,307],{"class":306},[300,490,311],{"class":310},[300,492,315],{"class":314},[300,494,495,497,499],{"class":302,"line":318},[300,496,321],{"class":306},[300,498,311],{"class":310},[300,500,501],{"class":314},"https:\u002F\u002F\u003Caccount_id>.r2.cloudflarestorage.com\n",[300,503,504,506,508],{"class":302,"line":329},[300,505,332],{"class":306},[300,507,311],{"class":310},[300,509,510],{"class":314},"auto\n",[300,512,513,515,517],{"class":302,"line":340},[300,514,343],{"class":306},[300,516,311],{"class":310},[300,518,348],{"class":314},[300,520,521,523,525],{"class":302,"line":351},[300,522,354],{"class":306},[300,524,311],{"class":310},[300,526,371],{"class":370},[300,528,529,531,533],{"class":302,"line":362},[300,530,365],{"class":306},[300,532,311],{"class":310},[300,534,371],{"class":370},[300,536,537,539,541,544],{"class":302,"line":374},[300,538,377],{"class":306},[300,540,311],{"class":310},[300,542,543],{"class":314},"https:\u002F\u002Ffiles.your-domain.com",[300,545,546],{"class":384},"   # 绑定的 R2 自定义域名\n",[300,548,549,551,553],{"class":302,"line":388},[300,550,391],{"class":306},[300,552,311],{"class":310},[300,554,396],{"class":370},[556,557,558],"tip",{},[78,559,560,561,563,564,566],{},"R2 的 Region 必须填 ",[113,562,242],{},"，并且建议在 R2 控制台绑定自定义域名后把它填入 ",[113,565,189],{},"，即可获得免费的全球 CDN 分发。",[205,568,570],{"id":569},"minio","MinIO",[291,572,574],{"className":293,"code":573,"language":295,"meta":296,"style":296},"driver: s3\nendpoint: https:\u002F\u002Fminio.your-domain.com\nregion: us-east-1\nbucket: kite\naccess_key_id: minioadmin\nsecret_access_key: minioadmin\nforce_path_style: true           # MinIO 必须启用\n",[113,575,576,584,593,602,611,620,628],{"__ignoreMap":296},[300,577,578,580,582],{"class":302,"line":303},[300,579,307],{"class":306},[300,581,311],{"class":310},[300,583,315],{"class":314},[300,585,586,588,590],{"class":302,"line":318},[300,587,321],{"class":306},[300,589,311],{"class":310},[300,591,592],{"class":314},"https:\u002F\u002Fminio.your-domain.com\n",[300,594,595,597,599],{"class":302,"line":329},[300,596,332],{"class":306},[300,598,311],{"class":310},[300,600,601],{"class":314},"us-east-1\n",[300,603,604,606,608],{"class":302,"line":340},[300,605,343],{"class":306},[300,607,311],{"class":310},[300,609,610],{"class":314},"kite\n",[300,612,613,615,617],{"class":302,"line":351},[300,614,354],{"class":306},[300,616,311],{"class":310},[300,618,619],{"class":314},"minioadmin\n",[300,621,622,624,626],{"class":302,"line":362},[300,623,365],{"class":306},[300,625,311],{"class":310},[300,627,619],{"class":314},[300,629,630,632,634,637],{"class":302,"line":374},[300,631,391],{"class":306},[300,633,311],{"class":310},[300,635,636],{"class":370},"true",[300,638,639],{"class":384},"           # MinIO 必须启用\n",[82,641,642],{"id":642},"多存储与默认存储",[644,645,646,655,658,669],"ul",{},[647,648,649,650,654],"li",{},"任一时间",[651,652,653],"strong",{},"至多一个存储","被标记为「默认」。",[647,656,657],{},"新文件总是写入默认存储。",[647,659,660,661,664,665,668],{},"管理员切换默认存储",[651,662,663],{},"不会","迁移历史文件 —— 每条文件记录都保留自己的 ",[113,666,667],{},"storage_config_id","，访问时走对应后端。",[647,670,671,672,675],{},"删除存储前",[651,673,674],{},"务必","确认没有文件引用它，否则这些文件将无法访问。",[82,677,678],{"id":678},"连通性测试",[78,680,681,682,685],{},"后台「存储 → 测试连接」按钮会触发一次 ",[113,683,684],{},"PUT → GET → DELETE"," 的完整往返，验证：",[687,688,689,692,695],"ol",{},[647,690,691],{},"签名算法是否正确",[647,693,694],{},"Bucket 是否存在且可写",[647,696,697],{},"IAM\u002FACL 权限是否足够",[78,699,700,701,704],{},"测试对象使用特殊前缀 ",[113,702,703],{},".kite-healthcheck\u002F","，执行完毕立即清除。",[82,706,707],{"id":707},"存储路径设计",[78,709,710,711,718,719,722],{},"无论本地还是 S3，Kite 都使用 ",[712,713,715],"a",{"href":714},"\u002Fdocs\u002Fguide\u002Fconfiguration#%E4%B8%8A%E4%BC%A0",[113,716,717],{},"path_pattern"," 生成 key。默认 ",[113,720,721],{},"{year}\u002F{month}\u002F{md5_8}\u002F{uuid}.{ext}"," 示例：",[291,724,729],{"className":725,"code":727,"language":728},[726],"language-text","2026\u002F04\u002Fa1b2c3d4\u002F01234567-89ab-cdef-0123-456789abcdef.jpg\n","text",[113,730,727],{"__ignoreMap":296},[78,732,733],{},"这种结构让任意 bucket 在单月上传量达到百万级时仍有良好的前缀分布。",[82,735,736],{"id":736},"下一步",[644,738,739,744],{},[647,740,741,743],{},[712,742,31],{"href":32}," · Nginx 配置与 HTTPS",[647,745,746,748],{},[712,747,35],{"href":36}," · 对接 PicGo 等工具",[750,751,752],"style",{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":296,"searchDepth":329,"depth":329,"links":754},[755,756,757,764,765,766,767],{"id":84,"depth":318,"text":84},{"id":137,"depth":318,"text":137},{"id":202,"depth":318,"text":203,"children":758},[759,760,761,762,763],{"id":207,"depth":329,"text":207},{"id":288,"depth":329,"text":289},{"id":399,"depth":329,"text":400},{"id":478,"depth":329,"text":479},{"id":569,"depth":329,"text":570},{"id":642,"depth":318,"text":642},{"id":678,"depth":318,"text":678},{"id":707,"depth":318,"text":707},{"id":736,"depth":318,"text":736},"本地磁盘与 S3 兼容存储的接入方法，包含阿里云 OSS、腾讯云 COS、Cloudflare R2、MinIO。","md",{},{"title":27},{"title":27,"description":768},"hZfadrolv79_Llc1O5-gz22jWfV6MMN-8KM6AjWGrjo",[775,777],{"title":23,"path":24,"stem":25,"description":776,"children":-1},"Kite 采用「少量环境变量 + 数据库运行时配置」的双层配置体系。",{"title":31,"path":32,"stem":33,"description":778,"children":-1},"完整部署指南，覆盖源码部署、Docker 部署、Docker Compose 部署与静态二进制部署。",1776443820141]