105 lines
42 KiB
JavaScript
105 lines
42 KiB
JavaScript
import{_ as i,o as a,c as n,a2 as t}from"./chunks/framework.B-QBKwc1.js";const c=JSON.parse('{"title":"上传配置详解","description":"文件上传配置定义在 config/file.php 和 .env 中,控制上传目录、域名、大小限制、允许的文件类型等。","frontmatter":{},"headers":[],"relativePath":"zh/tools/upload-config.md","filePath":"zh/tools/upload-config.md"}'),p={name:"zh/tools/upload-config.md"};function l(e,s,h,d,k,r){return a(),n("div",null,[...s[0]||(s[0]=[t(`<h1 id="_7-2-上传配置详解" tabindex="-1">7.2 上传配置详解 <a class="header-anchor" href="#_7-2-上传配置详解" aria-label="Permalink to "7.2 上传配置详解""></a></h1><div class="tip custom-block"><p class="custom-block-title">概述</p><p>文件上传配置定义在 <code>config/file.php</code> 和 <code>.env</code> 中,控制上传目录、域名、大小限制、允许的文件类型等。所有值通过 <code>env()</code> 函数从 <code>.env</code> 文件读取,支持多环境切换。</p></div><h2 id="配置文件" tabindex="-1">配置文件 <a class="header-anchor" href="#配置文件" aria-label="Permalink to "配置文件""></a></h2><div class="language-php vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">php</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">// config/file.php — 文件上传配置</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">// 所有值通过 env() 函数从 .env 文件读取,支持多环境切换</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">return</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">upload_dir</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> env</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">(</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">file.upload_dir</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> ''</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">),</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 上传根目录(绝对路径)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">domain_url</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> env</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">(</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">file.domain_url</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> ''</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">),</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 文件访问域名(拼接完整 URL 用)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">temp_dir</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">temp</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 临时目录名(相对 upload_dir)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">image_ext</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> env</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">(</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">file.image_ext</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">gif,jpg,jpeg,png,bmp,webp,svg</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">),</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 允许的图片后缀</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">file_ext</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> env</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">(</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">file.file_ext</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">gif,jpg,jpeg,png,bmp,webp,svg,doc,docx,xls,xlsx,ppt,pptx,pdf,zip,rar,txt,csv,mp3,mp4,sql,js,css</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">),</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 允许的文件后缀</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">max_size</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> env</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">(</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">file.max_size</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;"> 10</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">)</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> *</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;"> 1024</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> *</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;"> 1024</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> // 最大大小(MB → 字节)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">];</span></span></code></pre></div><h2 id="配置项详解" tabindex="-1">配置项详解 <a class="header-anchor" href="#配置项详解" aria-label="Permalink to "配置项详解""></a></h2><table tabindex="0"><thead><tr><th>配置项</th><th>.env 变量</th><th>默认值</th><th>说明</th></tr></thead><tbody><tr><td><code>upload_dir</code></td><td><code>[FILE] UPLOAD_DIR</code></td><td>-</td><td>上传根目录(绝对路径),所有文件存储于此</td></tr><tr><td><code>domain_url</code></td><td><code>[FILE] DOMAIN_URL</code></td><td>-</td><td>文件访问域名,用于拼接完整 URL</td></tr><tr><td><code>temp_dir</code></td><td>-</td><td><code>temp</code></td><td>临时目录名(相对 upload_dir)</td></tr><tr><td><code>image_ext</code></td><td><code>[FILE] IMAGE_EXT</code></td><td><code>gif,jpg,jpeg,png,bmp,webp,svg</code></td><td>图片允许后缀</td></tr><tr><td><code>file_ext</code></td><td><code>[FILE] FILE_EXT</code></td><td>多种后缀</td><td>文件允许后缀</td></tr><tr><td><code>max_size</code></td><td><code>[FILE] MAX_SIZE</code></td><td><code>10</code></td><td>单文件最大大小(MB)</td></tr></tbody></table><h3 id="upload-dir-—-上传根目录" tabindex="-1">upload_dir — 上传根目录 <a class="header-anchor" href="#upload-dir-—-上传根目录" aria-label="Permalink to "upload_dir — 上传根目录""></a></h3><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; .env</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">FILE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">UPLOAD_DIR</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> D:\\xampp8.2\\htdocs\\RXThinkCMF_ThinkPhp8_EleVue\\uploads</span></span></code></pre></div><p><strong>要求:</strong></p><ul><li>必须是绝对路径</li><li>目录必须存在且有写入权限</li><li>生产环境建议放在项目目录外(防止被 Web 直接访问)</li></ul><p><strong>各环境示例:</strong></p><table tabindex="0"><thead><tr><th>环境</th><th>路径示例</th></tr></thead><tbody><tr><td>Windows 开发</td><td><code>D:\\xampp8.2\\htdocs\\RXThinkCMF_ThinkPhp8_EleVue\\uploads</code></td></tr><tr><td>Linux 开发</td><td><code>/home/www/uploads</code></td></tr><tr><td>Linux 生产</td><td><code>/opt/data/uploads</code></td></tr><tr><td>Docker</td><td><code>/data/apps/uploads</code>(挂载卷)</td></tr></tbody></table><h3 id="domain-url-—-文件访问域名" tabindex="-1">domain_url — 文件访问域名 <a class="header-anchor" href="#domain-url-—-文件访问域名" aria-label="Permalink to "domain_url — 文件访问域名""></a></h3><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; .env</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">FILE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DOMAIN_URL</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> https://cdn.example.com</span></span></code></pre></div><p><strong>要求:</strong></p><ul><li>不要以 <code>/</code> 结尾</li><li>必须是前端可访问的域名</li><li>本地开发可留空(使用相对路径)</li></ul><p><strong>各环境示例:</strong></p><table tabindex="0"><thead><tr><th>环境</th><th>域名示例</th></tr></thead><tbody><tr><td>本地开发</td><td>(留空,使用相对路径)</td></tr><tr><td>测试环境</td><td><code>http://file.thinkphp8.elevue</code></td></tr><tr><td>生产环境</td><td><code>https://cdn.example.com</code></td></tr><tr><td>对象存储</td><td><code>https://bucket-name.oss-cn-hangzhou.aliyuncs.com</code></td></tr></tbody></table><h3 id="max-size-—-文件大小限制" tabindex="-1">max_size — 文件大小限制 <a class="header-anchor" href="#max-size-—-文件大小限制" aria-label="Permalink to "max_size — 文件大小限制""></a></h3><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; .env</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">FILE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">MAX_SIZE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 10</span></span></code></pre></div><p><strong>单位:</strong> MB(配置文件中会自动转换为字节:<code>10 * 1024 * 1024</code>)</p><p><strong>建议值:</strong></p><table tabindex="0"><thead><tr><th>场景</th><th>建议值</th><th>说明</th></tr></thead><tbody><tr><td>头像上传</td><td>2 MB</td><td>图片通常不会太大</td></tr><tr><td>文章封面</td><td>5 MB</td><td>压缩后的图片</td></tr><tr><td>通用文件上传</td><td>10 MB</td><td>默认值</td></tr><tr><td>文档上传</td><td>20 MB</td><td>PDF/Word 等</td></tr><tr><td>视频上传</td><td>100 MB</td><td>需配合分片上传</td></tr></tbody></table><h3 id="image-ext-—-图片允许后缀" tabindex="-1">image_ext — 图片允许后缀 <a class="header-anchor" href="#image-ext-—-图片允许后缀" aria-label="Permalink to "image_ext — 图片允许后缀""></a></h3><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; .env</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">FILE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">IMAGE_EXT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> gif,jpg,jpeg,png,bmp,webp,svg</span></span></code></pre></div><p><strong>默认值:</strong> <code>gif,jpg,jpeg,png,bmp,webp,svg</code></p><p><strong>说明:</strong> 用于 <code>uploadFile?type=image</code> 接口,只允许图片格式上传。</p><h3 id="file-ext-—-文件允许后缀" tabindex="-1">file_ext — 文件允许后缀 <a class="header-anchor" href="#file-ext-—-文件允许后缀" aria-label="Permalink to "file_ext — 文件允许后缀""></a></h3><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; .env</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">FILE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">FILE_EXT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> gif,jpg,jpeg,png,bmp,webp,svg,doc,docx,xls,xlsx,ppt,pptx,pdf,zip,rar,txt,csv,mp3,mp4,sql,js,css</span></span></code></pre></div><p><strong>默认值:</strong> 包含图片、文档、压缩包、音视频等常见格式。</p><p><strong>说明:</strong> 用于 <code>uploadFile</code> 接口,允许所有合法文件格式。</p><h2 id="-env-配置示例" tabindex="-1">.env 配置示例 <a class="header-anchor" href="#-env-配置示例" aria-label="Permalink to ".env 配置示例""></a></h2><h3 id="开发环境" tabindex="-1">开发环境 <a class="header-anchor" href="#开发环境" aria-label="Permalink to "开发环境""></a></h3><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">FILE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">UPLOAD_DIR</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> D:\\xampp8.2\\htdocs\\RXThinkCMF_ThinkPhp8_EleVue\\uploads</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DOMAIN_URL</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">MAX_SIZE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 10</span></span></code></pre></div><h3 id="测试环境" tabindex="-1">测试环境 <a class="header-anchor" href="#测试环境" aria-label="Permalink to "测试环境""></a></h3><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">FILE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">UPLOAD_DIR</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> /home/www/uploads</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DOMAIN_URL</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> http://file.thinkphp8.elevue</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">MAX_SIZE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 10</span></span></code></pre></div><h3 id="生产环境" tabindex="-1">生产环境 <a class="header-anchor" href="#生产环境" aria-label="Permalink to "生产环境""></a></h3><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">FILE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">UPLOAD_DIR</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> /opt/data/uploads</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DOMAIN_URL</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> https://cdn.example.com</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">MAX_SIZE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 10</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">IMAGE_EXT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> jpg,jpeg,png,gif,bmp,webp</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">FILE_EXT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> jpg,jpeg,png,gif,bmp,webp,doc,docx,xls,xlsx,pdf,zip,rar</span></span></code></pre></div><h3 id="对象存储-OSS-" tabindex="-1">对象存储(OSS) <a class="header-anchor" href="#对象存储-OSS-" aria-label="Permalink to "对象存储(OSS)""></a></h3><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; 如果使用阿里云 OSS 等对象存储,domain_url 设为 OSS 域名</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">FILE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">UPLOAD_DIR</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> /opt/data/uploads</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DOMAIN_URL</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> https://your-bucket.oss-cn-hangzhou.aliyuncs.com</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">MAX_SIZE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 50</span></span></code></pre></div><h2 id="目录结构" tabindex="-1">目录结构 <a class="header-anchor" href="#目录结构" aria-label="Permalink to "目录结构""></a></h2><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>{upload_dir}/ # upload_dir(上传根目录)</span></span>
|
||
<span class="line"><span>├── temp/ # 临时目录(temp_dir)</span></span>
|
||
<span class="line"><span>│ └── 20260920/ # 按日期分目录</span></span>
|
||
<span class="line"><span>│ ├── a1b2c3d4e5f6.jpg # 随机文件名(防止冲突)</span></span>
|
||
<span class="line"><span>│ └── f6e5d4c3b2a1.png</span></span>
|
||
<span class="line"><span>├── article/ # 正式目录(由 fileSaveDir 配置)</span></span>
|
||
<span class="line"><span>│ └── 20260920/</span></span>
|
||
<span class="line"><span>│ └── 143052_xK7pMn3q.jpg</span></span>
|
||
<span class="line"><span>├── example/</span></span>
|
||
<span class="line"><span>│ └── 20260920/</span></span>
|
||
<span class="line"><span>├── user/</span></span>
|
||
<span class="line"><span>│ └── avatar/</span></span>
|
||
<span class="line"><span>│ └── 20260920/</span></span>
|
||
<span class="line"><span>└── file_template/</span></span>
|
||
<span class="line"><span> └── 20260920/</span></span></code></pre></div><h3 id="目录命名规则" tabindex="-1">目录命名规则 <a class="header-anchor" href="#目录命名规则" aria-label="Permalink to "目录命名规则""></a></h3><table tabindex="0"><thead><tr><th>目录</th><th>说明</th><th>示例</th></tr></thead><tbody><tr><td><code>temp/</code></td><td>临时文件目录</td><td>上传后暂存于此</td></tr><tr><td><code>{module}/</code></td><td>正式目录(按模块)</td><td>由 Logic 的 <code>fileSaveDir</code> 配置</td></tr><tr><td><code>{date}/</code></td><td>日期子目录</td><td><code>20260920</code>(自动创建)</td></tr><tr><td><code>{random}.{ext}</code></td><td>随机文件名</td><td><code>a1b2c3d4e5f6.jpg</code>(防止冲突)</td></tr></tbody></table><h2 id="文件生命周期" tabindex="-1">文件生命周期 <a class="header-anchor" href="#文件生命周期" aria-label="Permalink to "文件生命周期""></a></h2><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>1. 前端上传 → upload_file()</span></span>
|
||
<span class="line"><span> 保存到: {upload_dir}/temp/20260920/a1b2c3d4e5f6.jpg</span></span>
|
||
<span class="line"><span> 返回: https://cdn.example.com/temp/20260920/a1b2c3d4e5f6.jpg</span></span>
|
||
<span class="line"><span></span></span>
|
||
<span class="line"><span>2. 前端提交表单 → 携带 fileUrl</span></span>
|
||
<span class="line"><span> POST /api/example/add { name: "测试", avatar: "https://..." }</span></span>
|
||
<span class="line"><span></span></span>
|
||
<span class="line"><span>3. BaseLogic::add() → save_file()</span></span>
|
||
<span class="line"><span> 检测到 temp/ → 移动到正式目录</span></span>
|
||
<span class="line"><span> {upload_dir}/temp/20260920/a1b2c3d4e5f6.jpg</span></span>
|
||
<span class="line"><span> → {upload_dir}/example/20260920/a1b2c3d4e5f6.jpg</span></span>
|
||
<span class="line"><span> 返回相对路径入库: /uploads/example/20260920/a1b2c3d4e5f6.jpg</span></span>
|
||
<span class="line"><span></span></span>
|
||
<span class="line"><span>4. BaseLogic::detail() → get_file_url()</span></span>
|
||
<span class="line"><span> 相对路径 → 拼接域名</span></span>
|
||
<span class="line"><span> /uploads/example/20260920/a1b2c3d4e5f6.jpg</span></span>
|
||
<span class="line"><span> → https://cdn.example.com/uploads/example/20260920/a1b2c3d4e5f6.jpg</span></span></code></pre></div><h2 id="与-Logic-层的配合" tabindex="-1">与 Logic 层的配合 <a class="header-anchor" href="#与-Logic-层的配合" aria-label="Permalink to "与 Logic 层的配合""></a></h2><div class="language-php vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">php</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">class</span><span style="--shiki-dark:#97E1F1;--shiki-light:#2E8F82;"> ArticleLogic</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> extends</span><span style="--shiki-dark:#97E1F1;--shiki-dark-font-style:italic;--shiki-light:#59873A;--shiki-light-font-style:inherit;"> BaseTenantLogic</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">{</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> /**</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> * 需要自动处理的文件上传字段</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> *</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> * </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">@var</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> array</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> */</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> protected</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> array</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">fileFields</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">cover</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">];</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> /**</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> * 文件保存的子目录</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> *</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> * </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">@var</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> string</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"> */</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> protected</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> string</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> $</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B07D48;">fileSaveDir</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">article</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">}</span></span></code></pre></div><p><strong>实际路径映射:</strong></p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>配置:</span></span>
|
||
<span class="line"><span> upload_dir = /opt/data/uploads</span></span>
|
||
<span class="line"><span> fileSaveDir = article</span></span>
|
||
<span class="line"><span></span></span>
|
||
<span class="line"><span>结果:</span></span>
|
||
<span class="line"><span> 临时文件: /opt/data/uploads/temp/20260920/abc.jpg</span></span>
|
||
<span class="line"><span> 正式文件: /opt/data/uploads/article/20260920/abc.jpg</span></span>
|
||
<span class="line"><span> 数据库存: /uploads/article/20260920/abc.jpg</span></span>
|
||
<span class="line"><span> 前端显示: https://cdn.example.com/uploads/article/20260920/abc.jpg</span></span></code></pre></div><h2 id="Nginx-配置" tabindex="-1">Nginx 配置 <a class="header-anchor" href="#Nginx-配置" aria-label="Permalink to "Nginx 配置""></a></h2><h3 id="静态文件直接由-Nginx-返回" tabindex="-1">静态文件直接由 Nginx 返回 <a class="header-anchor" href="#静态文件直接由-Nginx-返回" aria-label="Permalink to "静态文件直接由 Nginx 返回""></a></h3><div class="language-nginx vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">nginx</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 配置 Nginx 直接处理文件请求,不经过 PHP</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">location</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;"> /uploads/ </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">{</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> alias </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">/opt/data/uploads/</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> expires </span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;">30d</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> add_header </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">Cache-Control </span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">"public, immutable"</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">}</span></span></code></pre></div><h3 id="禁止上传目录执行-PHP" tabindex="-1">禁止上传目录执行 PHP <a class="header-anchor" href="#禁止上传目录执行-PHP" aria-label="Permalink to "禁止上传目录执行 PHP""></a></h3><div class="language-nginx vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">nginx</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 安全:禁止上传目录执行 PHP 文件</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">location</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ~*</span><span style="--shiki-dark:#E7EE98;--shiki-light:#AB5E3F;"> /uploads/.*\\.php$ </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">{</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> deny </span><span style="--shiki-dark:#BF9EEE;--shiki-light:#1E754F;">all</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">}</span></span></code></pre></div><h3 id="禁止访问隐藏文件" tabindex="-1">禁止访问隐藏文件 <a class="header-anchor" href="#禁止访问隐藏文件" aria-label="Permalink to "禁止访问隐藏文件""></a></h3><div class="language-nginx vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">nginx</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">location</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ~</span><span style="--shiki-dark:#E7EE98;--shiki-light:#AB5E3F;"> /\\. </span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">{</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> deny </span><span style="--shiki-dark:#BF9EEE;--shiki-light:#1E754F;">all</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">;</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">}</span></span></code></pre></div><h2 id="常见问题" tabindex="-1">常见问题 <a class="header-anchor" href="#常见问题" aria-label="Permalink to "常见问题""></a></h2><h3 id="问题-1-上传提示-目录不可写-" tabindex="-1">问题 1:上传提示"目录不可写" <a class="header-anchor" href="#问题-1-上传提示-目录不可写-" aria-label="Permalink to "问题 1:上传提示"目录不可写"""></a></h3><p><strong>原因:</strong> <code>upload_dir</code> 目录没有写入权限。</p><p><strong>解决:</strong></p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># Linux</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">chmod</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -R</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;"> 755</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /opt/data/uploads</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">chown</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -R</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> www:www</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /opt/data/uploads</span></span></code></pre></div><h3 id="问题-2-上传后图片不显示" tabindex="-1">问题 2:上传后图片不显示 <a class="header-anchor" href="#问题-2-上传后图片不显示" aria-label="Permalink to "问题 2:上传后图片不显示""></a></h3><p><strong>原因:</strong> <code>domain_url</code> 配置错误或 Nginx 未配置静态文件处理。</p><p><strong>解决:</strong></p><ol><li>检查 <code>.env</code> 中 <code>DOMAIN_URL</code> 是否正确</li><li>检查 Nginx 是否配置了 <code>/uploads/</code> 的 alias</li><li>浏览器打开图片 URL 看是否能直接访问</li></ol><h3 id="问题-3-文件大小限制不生效" tabindex="-1">问题 3:文件大小限制不生效 <a class="header-anchor" href="#问题-3-文件大小限制不生效" aria-label="Permalink to "问题 3:文件大小限制不生效""></a></h3><p><strong>原因:</strong> PHP 配置限制了上传大小。</p><p><strong>解决:</strong></p><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">; php.ini</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">upload_max_filesize</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 20M</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">post_max_size</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 25M</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">max_execution_time</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 300</span></span></code></pre></div><h3 id="问题-4-临时文件未清理" tabindex="-1">问题 4:临时文件未清理 <a class="header-anchor" href="#问题-4-临时文件未清理" aria-label="Permalink to "问题 4:临时文件未清理""></a></h3><p><strong>原因:</strong> <code>temp/</code> 目录中的文件在表单提交后未被 <code>save_file()</code> 迁移。</p><p><strong>解决:</strong> 定期清理 <code>temp/</code> 目录中超过 1 天的文件:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 定时任务:每天凌晨清理 1 天前的临时文件</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">find</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /opt/data/uploads/temp/</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -type</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> f</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -mtime</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> +1</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -delete</span></span></code></pre></div><h2 id="安全建议" tabindex="-1">安全建议 <a class="header-anchor" href="#安全建议" aria-label="Permalink to "安全建议""></a></h2><table tabindex="0"><thead><tr><th>建议</th><th>说明</th></tr></thead><tbody><tr><td>上传目录放在项目外</td><td>防止被 Web 直接访问源码</td></tr><tr><td>Nginx 禁止执行 PHP</td><td>防止上传恶意 PHP 文件并执行</td></tr><tr><td>扩展名白名单</td><td>只允许已知安全的文件类型</td></tr><tr><td>MIME 类型检查</td><td><code>finfo</code> 检测真实 MIME,防止伪造扩展名</td></tr><tr><td>随机文件名</td><td>防止路径遍历和文件名注入</td></tr><tr><td>文件大小限制</td><td>防止大文件 DoS 攻击</td></tr><tr><td>定期清理临时文件</td><td>避免磁盘空间被占满</td></tr></tbody></table>`,76)])])}const g=i(p,[["render",l]]);export{c as __pageData,g as default};
|