<article data-v-608e4900="">
    <section class="markdown">
        <h1>Upload <span class="subtitle">上传</span></h1>
        <section class="markdown">
            <p>文件选择上传和拖拽上传控件。</p>
            <h2 id="何时使用">何时使用</h2>
            <p>上传是将信息（网页、文字、图片、视频等）通过网页或者上传工具发布到远程服务器上的过程。</p>
            <ul>
                <li>当需要上传一个或一些文件时。</li>
                <li>当需要展现上传的进度时。</li>
                <li>当需要使用拖拽交互时。</li>
            </ul>
        </section>
    </section>
    <section class="markdown">
        <h2>代码演示</h2>
    </section>
    <div class="ant-row" data-v-608e4900="" style="margin-left: -8px; margin-right: -8px; row-gap: 0px;">
        <div class="ant-col ant-col-12 code-boxes-col-2-1" style="padding-left: 8px; padding-right: 8px;">
            <section class="code-box" id="components-upload-demo-basic">
                <section class="code-box-demo"><span><div class="ant-upload ant-upload-select ant-upload-select-text"><span role="button" tabindex="0" class="ant-upload"><input type="file" accept="" multiple="" style="display: none;"><button class="ant-btn" type="button"><!----><span role="img" aria-label="upload" class="anticon anticon-upload"><svg focusable="false" class="" data-icon="upload" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"></path></svg></span><span>Click to Upload</span></button>
                    </span>
        </div>
        <div class="ant-upload-list ant-upload-list-text"></div>
        </span>
        </section>
        <section class="code-box-meta markdown">
            <div class="code-box-title"><a href="#components-upload-demo-basic">点击上传</a></div>
            <div class="code-box-description">
                <p>经典款式，用户点击按钮弹出文件选择框。</p>
            </div>
        </section>
        <section class="highlight-wrapper">
            <div class="highlight">
                <pre class="language-vue"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-upload</span>
    <span class="token attr-name"><span class="token namespace">v-model:</span>file-list</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>fileList<span class="token punctuation">"</span></span>
    <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>file<span class="token punctuation">"</span></span>
    <span class="token attr-name">:multiple</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span>
    <span class="token attr-name">action</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://www.mocky.io/v2/5cc8019d300000980a055e76<span class="token punctuation">"</span></span>
    <span class="token attr-name">:headers</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>headers<span class="token punctuation">"</span></span>
    <span class="token attr-name">@change</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>handleChange<span class="token punctuation">"</span></span>
  <span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-button</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>upload-outlined</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>upload-outlined</span><span class="token punctuation">&gt;</span></span>
      Click to Upload
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-button</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-upload</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ts<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> <span class="token punctuation">{</span> message <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'ant-design-vue'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> UploadOutlined <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@ant-design/icons-vue'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> defineComponent<span class="token punctuation">,</span> ref <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span><span class="token punctuation">;</span> 
<span class="token keyword">interface</span> <span class="token class-name">FileItem</span> <span class="token punctuation">{</span>
  uid<span class="token operator">:</span> string<span class="token punctuation">;</span>
  name<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  status<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  response<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  url<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token keyword">interface</span> <span class="token class-name">FileInfo</span> <span class="token punctuation">{</span>
  file<span class="token operator">:</span> FileItem<span class="token punctuation">;</span>
  fileList<span class="token operator">:</span> FileItem<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineComponent</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  components<span class="token operator">:</span> <span class="token punctuation">{</span>
    UploadOutlined<span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> <span class="token function-variable function">handleChange</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">info<span class="token operator">:</span> FileInfo</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span>info<span class="token punctuation">.</span>file<span class="token punctuation">.</span>status <span class="token operator">!==</span> <span class="token string">'uploading'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>info<span class="token punctuation">.</span>file<span class="token punctuation">,</span> info<span class="token punctuation">.</span>fileList<span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span>info<span class="token punctuation">.</span>file<span class="token punctuation">.</span>status <span class="token operator">===</span> <span class="token string">'done'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        message<span class="token punctuation">.</span><span class="token function">success</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>info<span class="token punctuation">.</span>file<span class="token punctuation">.</span>name<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> file uploaded successfully</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>info<span class="token punctuation">.</span>file<span class="token punctuation">.</span>status <span class="token operator">===</span> <span class="token string">'error'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        message<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>info<span class="token punctuation">.</span>file<span class="token punctuation">.</span>name<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> file upload failed.</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span> 
    <span class="token keyword">const</span> fileList <span class="token operator">=</span> <span class="token function">ref</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token punctuation">{</span>
      fileList<span class="token punctuation">,</span>
      headers<span class="token operator">:</span> <span class="token punctuation">{</span>
        authorization<span class="token operator">:</span> <span class="token string">'authorization-text'</span><span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
      handleChange<span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
</code></pre>
            </div>
        </section>
        </section>
        <section class="code-box" id="components-upload-demo-defaultFileList">
            <section class="code-box-demo"><span><div class="ant-upload ant-upload-select ant-upload-select-text"><span role="button" tabindex="0" class="ant-upload"><input type="file" accept="" style="display: none;"><button class="ant-btn" type="button"><!----><span role="img" aria-label="upload" class="anticon anticon-upload"><svg focusable="false" class="" data-icon="upload" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"></path></svg></span><span>Upload</span></button>
                </span>
    </div>
    <div class="ant-upload-list ant-upload-list-text">
        <div class=""><span><div class="ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-list-type-text"><div class="ant-upload-list-item-info"><span><span role="img" aria-label="paper-clip" class="anticon anticon-paper-clip"><svg focusable="false" class="" data-icon="paper-clip" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M779.3 196.6c-94.2-94.2-247.6-94.2-341.7 0l-261 260.8c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l261-260.8c32.4-32.4 75.5-50.2 121.3-50.2s88.9 17.8 121.2 50.2c32.4 32.4 50.2 75.5 50.2 121.2 0 45.8-17.8 88.8-50.2 121.2l-266 265.9-43.1 43.1c-40.3 40.3-105.8 40.3-146.1 0-19.5-19.5-30.2-45.4-30.2-73s10.7-53.5 30.2-73l263.9-263.8c6.7-6.6 15.5-10.3 24.9-10.3h.1c9.4 0 18.1 3.7 24.7 10.3 6.7 6.7 10.3 15.5 10.3 24.9 0 9.3-3.7 18.1-10.3 24.7L372.4 653c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l215.6-215.6c19.9-19.9 30.8-46.3 30.8-74.4s-11-54.6-30.8-74.4c-41.1-41.1-107.9-41-149 0L463 364 224.8 602.1A172.22 172.22 0 00174 724.8c0 46.3 18.1 89.8 50.8 122.5 33.9 33.8 78.3 50.7 122.7 50.7 44.4 0 88.8-16.9 122.6-50.7l309.2-309C824.8 492.7 850 432 850 367.5c.1-64.6-25.1-125.3-70.7-170.9z"></path></svg></span>
            <a target="_blank" rel="noopener noreferrer" class="ant-upload-list-item-name ant-upload-list-item-name-icon-count-1" title="xxx.png" href="http://www.baidu.com/xxx.png">xxx.png</a><span class="ant-upload-list-item-card-actions "><!----><a title="删除文件"><span title="删除文件" tabindex="-1" role="img" aria-label="delete" class="anticon anticon-delete"><svg focusable="false" class="" data-icon="delete" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"></path></svg></span></a>
            </span>
            </span>
        </div>
        <!---->
        <!---->
    </div>
    </span>
    </div>
    <div class=""><span><div class="ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-list-type-text"><div class="ant-upload-list-item-info"><span><span role="img" aria-label="paper-clip" class="anticon anticon-paper-clip"><svg focusable="false" class="" data-icon="paper-clip" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M779.3 196.6c-94.2-94.2-247.6-94.2-341.7 0l-261 260.8c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l261-260.8c32.4-32.4 75.5-50.2 121.3-50.2s88.9 17.8 121.2 50.2c32.4 32.4 50.2 75.5 50.2 121.2 0 45.8-17.8 88.8-50.2 121.2l-266 265.9-43.1 43.1c-40.3 40.3-105.8 40.3-146.1 0-19.5-19.5-30.2-45.4-30.2-73s10.7-53.5 30.2-73l263.9-263.8c6.7-6.6 15.5-10.3 24.9-10.3h.1c9.4 0 18.1 3.7 24.7 10.3 6.7 6.7 10.3 15.5 10.3 24.9 0 9.3-3.7 18.1-10.3 24.7L372.4 653c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l215.6-215.6c19.9-19.9 30.8-46.3 30.8-74.4s-11-54.6-30.8-74.4c-41.1-41.1-107.9-41-149 0L463 364 224.8 602.1A172.22 172.22 0 00174 724.8c0 46.3 18.1 89.8 50.8 122.5 33.9 33.8 78.3 50.7 122.7 50.7 44.4 0 88.8-16.9 122.6-50.7l309.2-309C824.8 492.7 850 432 850 367.5c.1-64.6-25.1-125.3-70.7-170.9z"></path></svg></span>
        <a target="_blank" rel="noopener noreferrer" class="ant-upload-list-item-name ant-upload-list-item-name-icon-count-1" title="yyy.png" href="http://www.baidu.com/yyy.png">yyy.png</a><span class="ant-upload-list-item-card-actions "><!----><a title="删除文件"><span title="删除文件" tabindex="-1" role="img" aria-label="delete" class="anticon anticon-delete"><svg focusable="false" class="" data-icon="delete" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"></path></svg></span></a>
        </span>
        </span>
    </div>
    <!---->
    <!---->
    </div>
    </span>
    </div>
    <div class="">
        <!---->
        <div class="ant-upload-list-item ant-upload-list-item-error ant-upload-list-item-list-type-text">
            <div class="ant-upload-list-item-info"><span><span role="img" aria-label="paper-clip" class="anticon anticon-paper-clip"><svg focusable="false" class="" data-icon="paper-clip" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M779.3 196.6c-94.2-94.2-247.6-94.2-341.7 0l-261 260.8c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l261-260.8c32.4-32.4 75.5-50.2 121.3-50.2s88.9 17.8 121.2 50.2c32.4 32.4 50.2 75.5 50.2 121.2 0 45.8-17.8 88.8-50.2 121.2l-266 265.9-43.1 43.1c-40.3 40.3-105.8 40.3-146.1 0-19.5-19.5-30.2-45.4-30.2-73s10.7-53.5 30.2-73l263.9-263.8c6.7-6.6 15.5-10.3 24.9-10.3h.1c9.4 0 18.1 3.7 24.7 10.3 6.7 6.7 10.3 15.5 10.3 24.9 0 9.3-3.7 18.1-10.3 24.7L372.4 653c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l215.6-215.6c19.9-19.9 30.8-46.3 30.8-74.4s-11-54.6-30.8-74.4c-41.1-41.1-107.9-41-149 0L463 364 224.8 602.1A172.22 172.22 0 00174 724.8c0 46.3 18.1 89.8 50.8 122.5 33.9 33.8 78.3 50.7 122.7 50.7 44.4 0 88.8-16.9 122.6-50.7l309.2-309C824.8 492.7 850 432 850 367.5c.1-64.6-25.1-125.3-70.7-170.9z"></path></svg></span>
                <a target="_blank" rel="noopener noreferrer" class="ant-upload-list-item-name ant-upload-list-item-name-icon-count-1" title="zzz.png" href="http://www.baidu.com/zzz.png">zzz.png</a><span class="ant-upload-list-item-card-actions "><!----><a title="删除文件"><span title="删除文件" tabindex="-1" role="img" aria-label="delete" class="anticon anticon-delete"><svg focusable="false" class="" data-icon="delete" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"></path></svg></span></a>
                </span>
                </span>
            </div>
            <!---->
            <!---->
        </div>
    </div>
    </div>
    </span>
    </section>
    <section class="code-box-meta markdown">
        <div class="code-box-title"><a href="#components-upload-demo-defaultFileList">已上传的文件列表</a></div>
        <div class="code-box-description">
            <p>使用 <code>defaultFileList</code> 设置已上传的内容。</p>
        </div>
    </section>
    <section class="highlight-wrapper">
        <div class="highlight">
            <pre class="language-vue"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-upload</span> <span class="token attr-name">action</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://www.mocky.io/v2/5cc8019d300000980a055e76<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">v-model:</span>file-list</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>fileList<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-button</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>upload-outlined</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>upload-outlined</span><span class="token punctuation">&gt;</span></span>
      Upload
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-button</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-upload</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ts<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> <span class="token punctuation">{</span> UploadOutlined <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@ant-design/icons-vue'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> defineComponent<span class="token punctuation">,</span> ref <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span><span class="token punctuation">;</span> 
<span class="token keyword">interface</span> <span class="token class-name">FileItem</span> <span class="token punctuation">{</span>
  uid<span class="token operator">:</span> string<span class="token punctuation">;</span>
  name<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  status<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  response<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  url<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">interface</span> <span class="token class-name">FileInfo</span> <span class="token punctuation">{</span>
  file<span class="token operator">:</span> FileItem<span class="token punctuation">;</span>
  fileList<span class="token operator">:</span> FileItem<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineComponent</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  components<span class="token operator">:</span> <span class="token punctuation">{</span>
    UploadOutlined<span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> fileList <span class="token operator">=</span> ref<span class="token operator">&lt;</span>FileItem<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">[</span>
      <span class="token punctuation">{</span>
        uid<span class="token operator">:</span> <span class="token string">'1'</span><span class="token punctuation">,</span>
        name<span class="token operator">:</span> <span class="token string">'xxx.png'</span><span class="token punctuation">,</span>
        status<span class="token operator">:</span> <span class="token string">'done'</span><span class="token punctuation">,</span>
        response<span class="token operator">:</span> <span class="token string">'Server Error 500'</span><span class="token punctuation">,</span> <span class="token comment">// custom error message to show</span>
        url<span class="token operator">:</span> <span class="token string">'http://www.baidu.com/xxx.png'</span><span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
      <span class="token punctuation">{</span>
        uid<span class="token operator">:</span> <span class="token string">'2'</span><span class="token punctuation">,</span>
        name<span class="token operator">:</span> <span class="token string">'yyy.png'</span><span class="token punctuation">,</span>
        status<span class="token operator">:</span> <span class="token string">'done'</span><span class="token punctuation">,</span>
        url<span class="token operator">:</span> <span class="token string">'http://www.baidu.com/yyy.png'</span><span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
      <span class="token punctuation">{</span>
        uid<span class="token operator">:</span> <span class="token string">'3'</span><span class="token punctuation">,</span>
        name<span class="token operator">:</span> <span class="token string">'zzz.png'</span><span class="token punctuation">,</span>
        status<span class="token operator">:</span> <span class="token string">'error'</span><span class="token punctuation">,</span>
        response<span class="token operator">:</span> <span class="token string">'Server Error 500'</span><span class="token punctuation">,</span> <span class="token comment">// custom error message to show</span>
        url<span class="token operator">:</span> <span class="token string">'http://www.baidu.com/zzz.png'</span><span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 
    <span class="token keyword">const</span> <span class="token function-variable function">handleChange</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter"><span class="token punctuation">{</span> file<span class="token punctuation">,</span> fileList <span class="token punctuation">}</span><span class="token operator">:</span> FileInfo</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span>file<span class="token punctuation">.</span>status <span class="token operator">!==</span> <span class="token string">'uploading'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>file<span class="token punctuation">,</span> fileList<span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token punctuation">{</span>
      fileList<span class="token punctuation">,</span>
      handleChange<span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
</code></pre>
        </div>
    </section>
    </section>
    <section class="code-box" id="components-upload-demo-fileList">
        <section class="code-box-demo"><span><div class="ant-upload ant-upload-select ant-upload-select-text"><span role="button" tabindex="0" class="ant-upload"><input type="file" accept="" multiple="" style="display: none;"><button class="ant-btn" type="button"><!----><span role="img" aria-label="upload" class="anticon anticon-upload"><svg focusable="false" class="" data-icon="upload" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"></path></svg></span><span>Upload</span></button>
            </span>
            </div>
            <div class="ant-upload-list ant-upload-list-text">
                <div class=""><span><div class="ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-list-type-text"><div class="ant-upload-list-item-info"><span><span role="img" aria-label="paper-clip" class="anticon anticon-paper-clip"><svg focusable="false" class="" data-icon="paper-clip" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M779.3 196.6c-94.2-94.2-247.6-94.2-341.7 0l-261 260.8c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l261-260.8c32.4-32.4 75.5-50.2 121.3-50.2s88.9 17.8 121.2 50.2c32.4 32.4 50.2 75.5 50.2 121.2 0 45.8-17.8 88.8-50.2 121.2l-266 265.9-43.1 43.1c-40.3 40.3-105.8 40.3-146.1 0-19.5-19.5-30.2-45.4-30.2-73s10.7-53.5 30.2-73l263.9-263.8c6.7-6.6 15.5-10.3 24.9-10.3h.1c9.4 0 18.1 3.7 24.7 10.3 6.7 6.7 10.3 15.5 10.3 24.9 0 9.3-3.7 18.1-10.3 24.7L372.4 653c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l215.6-215.6c19.9-19.9 30.8-46.3 30.8-74.4s-11-54.6-30.8-74.4c-41.1-41.1-107.9-41-149 0L463 364 224.8 602.1A172.22 172.22 0 00174 724.8c0 46.3 18.1 89.8 50.8 122.5 33.9 33.8 78.3 50.7 122.7 50.7 44.4 0 88.8-16.9 122.6-50.7l309.2-309C824.8 492.7 850 432 850 367.5c.1-64.6-25.1-125.3-70.7-170.9z"></path></svg></span>
                    <a target="_blank" rel="noopener noreferrer" class="ant-upload-list-item-name ant-upload-list-item-name-icon-count-1" title="xxx.png" href="http://www.baidu.com/xxx.png">xxx.png</a><span class="ant-upload-list-item-card-actions "><!----><a title="删除文件"><span title="删除文件" tabindex="-1" role="img" aria-label="delete" class="anticon anticon-delete"><svg focusable="false" class="" data-icon="delete" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"></path></svg></span></a>
                    </span>
                    </span>
                </div>
                <!---->
                <!---->
            </div>
            </span>
            </div>
            </div>
            </span>
        </section>
        <section class="code-box-meta markdown">
            <div class="code-box-title"><a href="#components-upload-demo-fileList">完全控制的上传列表</a></div>
            <div class="code-box-description">
                <p>使用 <code>fileList</code> 对列表进行完全控制，可以实现各种自定义功能，以下演示二种情况：</p>
                <ol>
                    <li>
                        <p>上传列表数量的限制。</p>
                    </li>
                    <li>
                        <p>读取远程路径并显示链接。</p>
                    </li>
                </ol>
            </div>
        </section>
        <section class="highlight-wrapper">
            <div class="highlight">
                <pre class="language-vue"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-upload</span>
    <span class="token attr-name">action</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://www.mocky.io/v2/5cc8019d300000980a055e76<span class="token punctuation">"</span></span>
    <span class="token attr-name">:multiple</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span>
    <span class="token attr-name">:file-list</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>fileList<span class="token punctuation">"</span></span>
    <span class="token attr-name">@change</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>handleChange<span class="token punctuation">"</span></span>
  <span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-button</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>upload-outlined</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>upload-outlined</span><span class="token punctuation">&gt;</span></span>
      Upload
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-button</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-upload</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ts<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> <span class="token punctuation">{</span> UploadOutlined <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@ant-design/icons-vue'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> defineComponent<span class="token punctuation">,</span> ref <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span><span class="token punctuation">;</span> 
<span class="token keyword">interface</span> <span class="token class-name">FileItem</span> <span class="token punctuation">{</span>
  uid<span class="token operator">:</span> string<span class="token punctuation">;</span>
  name<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  status<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  response<span class="token operator">?</span><span class="token operator">:</span> Response<span class="token punctuation">;</span>
  url<span class="token operator">:</span> string<span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token keyword">interface</span> <span class="token class-name">FileInfo</span> <span class="token punctuation">{</span>
  file<span class="token operator">:</span> FileItem<span class="token punctuation">;</span>
  fileList<span class="token operator">:</span> FileItem<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineComponent</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  components<span class="token operator">:</span> <span class="token punctuation">{</span>
    UploadOutlined<span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> fileList <span class="token operator">=</span> ref<span class="token operator">&lt;</span>FileItem<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">[</span>
      <span class="token punctuation">{</span>
        uid<span class="token operator">:</span> <span class="token string">'-1'</span><span class="token punctuation">,</span>
        name<span class="token operator">:</span> <span class="token string">'xxx.png'</span><span class="token punctuation">,</span>
        status<span class="token operator">:</span> <span class="token string">'done'</span><span class="token punctuation">,</span>
        url<span class="token operator">:</span> <span class="token string">'http://www.baidu.com/xxx.png'</span><span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">const</span> <span class="token function-variable function">handleChange</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">info<span class="token operator">:</span> FileInfo</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">let</span> resFileList <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token operator">...</span>info<span class="token punctuation">.</span>fileList<span class="token punctuation">]</span><span class="token punctuation">;</span> 
      <span class="token comment">// 1. Limit the number of uploaded files</span>
      <span class="token comment">//    Only to show two recent uploaded files, and old ones will be replaced by the new</span>
      resFileList <span class="token operator">=</span> resFileList<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 
      <span class="token comment">// 2. read from response and show file link</span>
      resFileList <span class="token operator">=</span> resFileList<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token parameter">file</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>file<span class="token punctuation">.</span>response<span class="token punctuation">)</span> <span class="token punctuation">{</span>
          <span class="token comment">// Component will show file.url as link</span>
          file<span class="token punctuation">.</span>url <span class="token operator">=</span> file<span class="token punctuation">.</span>response<span class="token punctuation">.</span>url<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token keyword">return</span> file<span class="token punctuation">;</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 
      fileList<span class="token punctuation">.</span>value <span class="token operator">=</span> resFileList<span class="token punctuation">;</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token punctuation">{</span>
      fileList<span class="token punctuation">,</span>
      handleChange<span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
</code></pre>
            </div>
        </section>
    </section>
    <section class="code-box" id="components-upload-demo-picture-style" data-v-b59703e6="">
        <section class="code-box-demo">
            <div data-v-b59703e6=""><span data-v-b59703e6=""><div class="ant-upload ant-upload-select ant-upload-select-picture"><span role="button" tabindex="0" class="ant-upload"><input type="file" accept="" style="display: none;"><button class="ant-btn" type="button" data-v-b59703e6=""><!----><span role="img" aria-label="upload" class="anticon anticon-upload" data-v-b59703e6=""><svg focusable="false" class="" data-icon="upload" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"></path></svg></span><span>upload</span></button>
                </span>
            </div>
            <div class="ant-upload-list ant-upload-list-picture">
                <div class=""><span><div class="ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-list-type-picture"><div class="ant-upload-list-item-info"><span><a class="ant-upload-list-item-thumbnail" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" target="_blank" rel="noopener noreferrer"><img src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" alt="xxx.png" class="ant-upload-list-item-image"></a><a target="_blank" rel="noopener noreferrer" class="ant-upload-list-item-name ant-upload-list-item-name-icon-count-1" title="xxx.png" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png">xxx.png</a><span class="ant-upload-list-item-card-actions picture"><!----><a title="删除文件"><span title="删除文件" tabindex="-1" role="img" aria-label="delete" class="anticon anticon-delete"><svg focusable="false" class="" data-icon="delete" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"></path></svg></span></a>
                    </span>
                    </span>
                </div>
                <!---->
                <!---->
            </div>
            </span>
            </div>
            <div class=""><span><div class="ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-list-type-picture"><div class="ant-upload-list-item-info"><span><a class="ant-upload-list-item-thumbnail" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" target="_blank" rel="noopener noreferrer"><img src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" alt="yyy.png" class="ant-upload-list-item-image"></a><a target="_blank" rel="noopener noreferrer" class="ant-upload-list-item-name ant-upload-list-item-name-icon-count-1" title="yyy.png" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png">yyy.png</a><span class="ant-upload-list-item-card-actions picture"><!----><a title="删除文件"><span title="删除文件" tabindex="-1" role="img" aria-label="delete" class="anticon anticon-delete"><svg focusable="false" class="" data-icon="delete" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"></path></svg></span></a>
                </span>
                </span>
            </div>
            <!---->
            <!---->
            </div>
            </span>
            </div>
            </div>
            </span><br data-v-b59703e6=""><br data-v-b59703e6=""><span class="upload-list-inline" data-v-b59703e6=""><div class="ant-upload ant-upload-select ant-upload-select-picture"><span role="button" tabindex="0" class="ant-upload"><input type="file" accept="" style="display: none;"><button class="ant-btn" type="button" data-v-b59703e6=""><!----><span role="img" aria-label="upload" class="anticon anticon-upload" data-v-b59703e6=""><svg focusable="false" class="" data-icon="upload" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"></path></svg></span><span>upload</span></button>
            </span>
            </div>
            <div class="ant-upload-list ant-upload-list-picture">
                <div class=""><span><div class="ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-list-type-picture"><div class="ant-upload-list-item-info"><span><a class="ant-upload-list-item-thumbnail" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" target="_blank" rel="noopener noreferrer"><img src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" alt="xxx.png" class="ant-upload-list-item-image"></a><a target="_blank" rel="noopener noreferrer" class="ant-upload-list-item-name ant-upload-list-item-name-icon-count-1" title="xxx.png" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png">xxx.png</a><span class="ant-upload-list-item-card-actions picture"><!----><a title="删除文件"><span title="删除文件" tabindex="-1" role="img" aria-label="delete" class="anticon anticon-delete"><svg focusable="false" class="" data-icon="delete" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"></path></svg></span></a>
                    </span>
                    </span>
                </div>
                <!---->
                <!---->
            </div>
            </span>
            </div>
            <div class=""><span><div class="ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-list-type-picture"><div class="ant-upload-list-item-info"><span><a class="ant-upload-list-item-thumbnail" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" target="_blank" rel="noopener noreferrer"><img src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" alt="yyy.png" class="ant-upload-list-item-image"></a><a target="_blank" rel="noopener noreferrer" class="ant-upload-list-item-name ant-upload-list-item-name-icon-count-1" title="yyy.png" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png">yyy.png</a><span class="ant-upload-list-item-card-actions picture"><!----><a title="删除文件"><span title="删除文件" tabindex="-1" role="img" aria-label="delete" class="anticon anticon-delete"><svg focusable="false" class="" data-icon="delete" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"></path></svg></span></a>
                </span>
                </span>
            </div>
            <!---->
            <!---->
            </div>
            </span>
            </div>
            </div>
            </span>
            </div>
        </section>
        <section class="code-box-meta markdown">
            <div class="code-box-title"><a href="#components-upload-demo-picture-style">图片列表样式</a></div>
            <div class="code-box-description">
                <p>上传文件为图片，可展示本地缩略图。<code>IE8/9</code> 不支持浏览器本地缩略图展示（<a href="https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL" target="_blank" rel="noopener noreferrer">Ref</a>），可以写 <code>thumbUrl</code> 属性来代替。</p>
            </div>
        </section>
        <section class="highlight-wrapper">
            <div class="highlight">
                <pre class="language-vue" data-v-b59703e6=""><code data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;</span>template</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
  <span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;</span>div</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
    <span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;</span>a-upload</span>
      <span class="token attr-name" data-v-b59703e6="">action</span><span class="token attr-value" data-v-b59703e6=""><span class="token punctuation attr-equals" data-v-b59703e6="">=</span><span class="token punctuation" data-v-b59703e6="">"</span>https://www.mocky.io/v2/5cc8019d300000980a055e76<span class="token punctuation" data-v-b59703e6="">"</span></span>
      <span class="token attr-name" data-v-b59703e6="">list-type</span><span class="token attr-value" data-v-b59703e6=""><span class="token punctuation attr-equals" data-v-b59703e6="">=</span><span class="token punctuation" data-v-b59703e6="">"</span>picture<span class="token punctuation" data-v-b59703e6="">"</span></span>
      <span class="token attr-name" data-v-b59703e6=""><span class="token namespace" data-v-b59703e6="">v-model:</span>file-list</span><span class="token attr-value" data-v-b59703e6=""><span class="token punctuation attr-equals" data-v-b59703e6="">=</span><span class="token punctuation" data-v-b59703e6="">"</span>fileList<span class="token punctuation" data-v-b59703e6="">"</span></span>
    <span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
      <span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;</span>a-button</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
        <span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;</span>upload-outlined</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span><span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;/</span>upload-outlined</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
        upload
      <span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;/</span>a-button</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
    <span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;/</span>a-upload</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
    <span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;</span>br</span> <span class="token punctuation" data-v-b59703e6="">/&gt;</span></span>
    <span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;</span>br</span> <span class="token punctuation" data-v-b59703e6="">/&gt;</span></span>
    <span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;</span>a-upload</span>
      <span class="token attr-name" data-v-b59703e6="">action</span><span class="token attr-value" data-v-b59703e6=""><span class="token punctuation attr-equals" data-v-b59703e6="">=</span><span class="token punctuation" data-v-b59703e6="">"</span>https://www.mocky.io/v2/5cc8019d300000980a055e76<span class="token punctuation" data-v-b59703e6="">"</span></span>
      <span class="token attr-name" data-v-b59703e6="">list-type</span><span class="token attr-value" data-v-b59703e6=""><span class="token punctuation attr-equals" data-v-b59703e6="">=</span><span class="token punctuation" data-v-b59703e6="">"</span>picture<span class="token punctuation" data-v-b59703e6="">"</span></span>
      <span class="token attr-name" data-v-b59703e6=""><span class="token namespace" data-v-b59703e6="">v-model:</span>file-list</span><span class="token attr-value" data-v-b59703e6=""><span class="token punctuation attr-equals" data-v-b59703e6="">=</span><span class="token punctuation" data-v-b59703e6="">"</span>fileList1<span class="token punctuation" data-v-b59703e6="">"</span></span>
      <span class="token attr-name" data-v-b59703e6="">class</span><span class="token attr-value" data-v-b59703e6=""><span class="token punctuation attr-equals" data-v-b59703e6="">=</span><span class="token punctuation" data-v-b59703e6="">"</span>upload-list-inline<span class="token punctuation" data-v-b59703e6="">"</span></span>
    <span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
      <span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;</span>a-button</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
        <span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;</span>upload-outlined</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span><span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;/</span>upload-outlined</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
        upload
      <span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;/</span>a-button</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
    <span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;/</span>a-upload</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
  <span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;/</span>div</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
<span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;/</span>template</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
<span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;</span>script</span> <span class="token attr-name" data-v-b59703e6="">lang</span><span class="token attr-value" data-v-b59703e6=""><span class="token punctuation attr-equals" data-v-b59703e6="">=</span><span class="token punctuation" data-v-b59703e6="">"</span>ts<span class="token punctuation" data-v-b59703e6="">"</span></span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span><span class="token script" data-v-b59703e6=""><span class="token language-javascript" data-v-b59703e6="">
<span class="token keyword" data-v-b59703e6="">import</span> <span class="token punctuation" data-v-b59703e6="">{</span> UploadOutlined <span class="token punctuation" data-v-b59703e6="">}</span> <span class="token keyword" data-v-b59703e6="">from</span> <span class="token string" data-v-b59703e6="">'@ant-design/icons-vue'</span><span class="token punctuation" data-v-b59703e6="">;</span>
<span class="token keyword" data-v-b59703e6="">import</span> <span class="token punctuation" data-v-b59703e6="">{</span> defineComponent<span class="token punctuation" data-v-b59703e6="">,</span> ref <span class="token punctuation" data-v-b59703e6="">}</span> <span class="token keyword" data-v-b59703e6="">from</span> <span class="token string" data-v-b59703e6="">'vue'</span><span class="token punctuation" data-v-b59703e6="">;</span> 
<span class="token keyword" data-v-b59703e6="">interface</span> <span class="token class-name" data-v-b59703e6="">FileItem</span> <span class="token punctuation" data-v-b59703e6="">{</span>
  uid<span class="token operator" data-v-b59703e6="">:</span> string<span class="token punctuation" data-v-b59703e6="">;</span>
  name<span class="token operator" data-v-b59703e6="">?</span><span class="token operator" data-v-b59703e6="">:</span> string<span class="token punctuation" data-v-b59703e6="">;</span>
  status<span class="token operator" data-v-b59703e6="">?</span><span class="token operator" data-v-b59703e6="">:</span> string<span class="token punctuation" data-v-b59703e6="">;</span>
  response<span class="token operator" data-v-b59703e6="">?</span><span class="token operator" data-v-b59703e6="">:</span> string<span class="token punctuation" data-v-b59703e6="">;</span>
  url<span class="token operator" data-v-b59703e6="">?</span><span class="token operator" data-v-b59703e6="">:</span> string<span class="token punctuation" data-v-b59703e6="">;</span>
  thumbUrl<span class="token operator" data-v-b59703e6="">?</span><span class="token operator" data-v-b59703e6="">:</span> string<span class="token punctuation" data-v-b59703e6="">;</span>
<span class="token punctuation" data-v-b59703e6="">}</span> 
<span class="token keyword" data-v-b59703e6="">export</span> <span class="token keyword" data-v-b59703e6="">default</span> <span class="token function" data-v-b59703e6="">defineComponent</span><span class="token punctuation" data-v-b59703e6="">(</span><span class="token punctuation" data-v-b59703e6="">{</span>
  components<span class="token operator" data-v-b59703e6="">:</span> <span class="token punctuation" data-v-b59703e6="">{</span>
    UploadOutlined<span class="token punctuation" data-v-b59703e6="">,</span>
  <span class="token punctuation" data-v-b59703e6="">}</span><span class="token punctuation" data-v-b59703e6="">,</span>
  <span class="token function" data-v-b59703e6="">setup</span><span class="token punctuation" data-v-b59703e6="">(</span><span class="token punctuation" data-v-b59703e6="">)</span> <span class="token punctuation" data-v-b59703e6="">{</span>
    <span class="token keyword" data-v-b59703e6="">const</span> fileList <span class="token operator" data-v-b59703e6="">=</span> ref<span class="token operator" data-v-b59703e6="">&lt;</span>FileItem<span class="token punctuation" data-v-b59703e6="">[</span><span class="token punctuation" data-v-b59703e6="">]</span><span class="token operator" data-v-b59703e6="">&gt;</span><span class="token punctuation" data-v-b59703e6="">(</span><span class="token punctuation" data-v-b59703e6="">[</span>
      <span class="token punctuation" data-v-b59703e6="">{</span>
        uid<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'-1'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        name<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'xxx.png'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        status<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'done'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        url<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        thumbUrl<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'</span><span class="token punctuation" data-v-b59703e6="">,</span>
      <span class="token punctuation" data-v-b59703e6="">}</span><span class="token punctuation" data-v-b59703e6="">,</span>
      <span class="token punctuation" data-v-b59703e6="">{</span>
        uid<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'-2'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        name<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'yyy.png'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        status<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'done'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        url<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        thumbUrl<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'</span><span class="token punctuation" data-v-b59703e6="">,</span>
      <span class="token punctuation" data-v-b59703e6="">}</span><span class="token punctuation" data-v-b59703e6="">,</span>
    <span class="token punctuation" data-v-b59703e6="">]</span><span class="token punctuation" data-v-b59703e6="">)</span><span class="token punctuation" data-v-b59703e6="">;</span>
    <span class="token keyword" data-v-b59703e6="">const</span> fileList1 <span class="token operator" data-v-b59703e6="">=</span> ref<span class="token operator" data-v-b59703e6="">&lt;</span>FileItem<span class="token punctuation" data-v-b59703e6="">[</span><span class="token punctuation" data-v-b59703e6="">]</span><span class="token operator" data-v-b59703e6="">&gt;</span><span class="token punctuation" data-v-b59703e6="">(</span><span class="token punctuation" data-v-b59703e6="">[</span>
      <span class="token punctuation" data-v-b59703e6="">{</span>
        uid<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'-1'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        name<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'xxx.png'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        status<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'done'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        url<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        thumbUrl<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'</span><span class="token punctuation" data-v-b59703e6="">,</span>
      <span class="token punctuation" data-v-b59703e6="">}</span><span class="token punctuation" data-v-b59703e6="">,</span>
      <span class="token punctuation" data-v-b59703e6="">{</span>
        uid<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'-2'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        name<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'yyy.png'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        status<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'done'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        url<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'</span><span class="token punctuation" data-v-b59703e6="">,</span>
        thumbUrl<span class="token operator" data-v-b59703e6="">:</span> <span class="token string" data-v-b59703e6="">'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'</span><span class="token punctuation" data-v-b59703e6="">,</span>
      <span class="token punctuation" data-v-b59703e6="">}</span><span class="token punctuation" data-v-b59703e6="">,</span>
    <span class="token punctuation" data-v-b59703e6="">]</span><span class="token punctuation" data-v-b59703e6="">)</span><span class="token punctuation" data-v-b59703e6="">;</span>
    <span class="token keyword" data-v-b59703e6="">return</span> <span class="token punctuation" data-v-b59703e6="">{</span>
      fileList<span class="token punctuation" data-v-b59703e6="">,</span>
      fileList1<span class="token punctuation" data-v-b59703e6="">,</span>
    <span class="token punctuation" data-v-b59703e6="">}</span><span class="token punctuation" data-v-b59703e6="">;</span>
  <span class="token punctuation" data-v-b59703e6="">}</span><span class="token punctuation" data-v-b59703e6="">,</span>
<span class="token punctuation" data-v-b59703e6="">}</span><span class="token punctuation" data-v-b59703e6="">)</span><span class="token punctuation" data-v-b59703e6="">;</span>
</span></span><span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;/</span>script</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
<span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;</span>style</span> <span class="token attr-name" data-v-b59703e6="">scoped</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span><span class="token style" data-v-b59703e6=""><span class="token language-css" data-v-b59703e6="">
<span class="token comment" data-v-b59703e6="">/* tile uploaded pictures */</span>
<span class="token selector" data-v-b59703e6="">.upload-list-inline :deep(.ant-upload-list-item)</span> <span class="token punctuation" data-v-b59703e6="">{</span>
  <span class="token property" data-v-b59703e6="">float</span><span class="token punctuation" data-v-b59703e6="">:</span> left<span class="token punctuation" data-v-b59703e6="">;</span>
  <span class="token property" data-v-b59703e6="">width</span><span class="token punctuation" data-v-b59703e6="">:</span> 200px<span class="token punctuation" data-v-b59703e6="">;</span>
  <span class="token property" data-v-b59703e6="">margin-right</span><span class="token punctuation" data-v-b59703e6="">:</span> 8px<span class="token punctuation" data-v-b59703e6="">;</span>
<span class="token punctuation" data-v-b59703e6="">}</span>
<span class="token selector" data-v-b59703e6="">.upload-list-inline :deep(.ant-upload-animate-enter)</span> <span class="token punctuation" data-v-b59703e6="">{</span>
  <span class="token property" data-v-b59703e6="">animation-name</span><span class="token punctuation" data-v-b59703e6="">:</span> uploadAnimateInlineIn<span class="token punctuation" data-v-b59703e6="">;</span>
<span class="token punctuation" data-v-b59703e6="">}</span>
<span class="token selector" data-v-b59703e6="">.upload-list-inline :deep(.ant-upload-animate-leave)</span> <span class="token punctuation" data-v-b59703e6="">{</span>
  <span class="token property" data-v-b59703e6="">animation-name</span><span class="token punctuation" data-v-b59703e6="">:</span> uploadAnimateInlineOut<span class="token punctuation" data-v-b59703e6="">;</span>
<span class="token punctuation" data-v-b59703e6="">}</span>
</span></span><span class="token tag" data-v-b59703e6=""><span class="token tag" data-v-b59703e6=""><span class="token punctuation" data-v-b59703e6="">&lt;/</span>style</span><span class="token punctuation" data-v-b59703e6="">&gt;</span></span>
</code></pre>
            </div>
        </section>
    </section>
    <section class="code-box" id="components-upload-demo-directory">
        <section class="code-box-demo"><span><div class="ant-upload ant-upload-select ant-upload-select-text"><span role="button" tabindex="0" class="ant-upload"><input type="file" accept="" directory="directory" webkitdirectory="" style="display: none;"><button class="ant-btn" type="button"><!----><span role="img" aria-label="upload" class="anticon anticon-upload"><svg focusable="false" class="" data-icon="upload" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"></path></svg></span><span>Upload Directory</span></button>
            </span>
            </div>
            <div class="ant-upload-list ant-upload-list-text"></div>
            </span>
        </section>
        <section class="code-box-meta markdown">
            <div class="code-box-title"><a href="#components-upload-demo-directory">文件夹上传</a></div>
            <div class="code-box-description">
                <p>支持上传一个文件夹里的所有文件。</p>
            </div>
        </section>
        <section class="highlight-wrapper">
            <div class="highlight">
                <pre class="language-vue"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-upload</span> <span class="token attr-name">action</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://www.mocky.io/v2/5cc8019d300000980a055e76<span class="token punctuation">"</span></span> <span class="token attr-name">directory</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-button</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>upload-outlined</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>upload-outlined</span><span class="token punctuation">&gt;</span></span>
      Upload Directory
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-button</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-upload</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ts<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> <span class="token punctuation">{</span> defineComponent <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> UploadOutlined <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@ant-design/icons-vue'</span><span class="token punctuation">;</span> 
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineComponent</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  components<span class="token operator">:</span> <span class="token punctuation">{</span>
    UploadOutlined<span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
</code></pre>
            </div>
        </section>
    </section>
    <section class="code-box" id="components-upload-demo-transform-file">
        <section class="code-box-demo">
            <div><span><div class="ant-upload ant-upload-select ant-upload-select-text"><span role="button" tabindex="0" class="ant-upload"><input type="file" accept="" style="display: none;"><button class="ant-btn" type="button"><!----><span role="img" aria-label="upload" class="anticon anticon-upload"><svg focusable="false" class="" data-icon="upload" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"></path></svg></span><span>Upload</span></button>
                </span>
            </div>
            <div class="ant-upload-list ant-upload-list-text"></div>
            </span>
            </div>
        </section>
        <section class="code-box-meta markdown">
            <div class="code-box-title"><a href="#components-upload-demo-transform-file">上传前转换文件</a></div>
            <div class="code-box-description">
                <p>使用 <code>beforeUpload</code> 转换上传的文件（例如添加水印）。</p>
            </div>
        </section>
        <section class="highlight-wrapper">
            <div class="highlight">
                <pre class="language-vue"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-upload</span>
      <span class="token attr-name">action</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://www.mocky.io/v2/5cc8019d300000980a055e76<span class="token punctuation">"</span></span>
      <span class="token attr-name">:transform-file</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>transformFile<span class="token punctuation">"</span></span>
      <span class="token attr-name"><span class="token namespace">v-model:</span>file-list</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>fileList<span class="token punctuation">"</span></span>
    <span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-button</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>upload-outlined</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>upload-outlined</span><span class="token punctuation">&gt;</span></span>
        Upload
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-button</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-upload</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ts<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> <span class="token punctuation">{</span> UploadOutlined <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@ant-design/icons-vue'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> defineComponent<span class="token punctuation">,</span> ref <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span><span class="token punctuation">;</span> 
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineComponent</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  components<span class="token operator">:</span> <span class="token punctuation">{</span>
    UploadOutlined<span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> <span class="token function-variable function">transformFile</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">file<span class="token operator">:</span> any</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token parameter">resolve</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
        <span class="token keyword">const</span> reader <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileReader</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        reader<span class="token punctuation">.</span><span class="token function">readAsDataURL</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span>
        reader<span class="token punctuation">.</span><span class="token function-variable function">onload</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
          <span class="token keyword">const</span> canvas <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">'canvas'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
          <span class="token keyword">const</span> img<span class="token operator">:</span> HTMLImageElement <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">'img'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
          img<span class="token punctuation">.</span>src <span class="token operator">=</span> reader<span class="token punctuation">.</span>result <span class="token keyword">as</span> string<span class="token punctuation">;</span>
          img<span class="token punctuation">.</span><span class="token function-variable function">onload</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
            <span class="token keyword">const</span> ctx<span class="token operator">:</span> CanvasRenderingContext2D <span class="token operator">=</span> canvas<span class="token punctuation">.</span><span class="token function">getContext</span><span class="token punctuation">(</span><span class="token string">'2d'</span><span class="token punctuation">)</span><span class="token operator">!</span><span class="token punctuation">;</span>
            ctx<span class="token punctuation">.</span><span class="token function">drawImage</span><span class="token punctuation">(</span>img<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            ctx<span class="token punctuation">.</span>fillStyle <span class="token operator">=</span> <span class="token string">'red'</span><span class="token punctuation">;</span>
            ctx<span class="token punctuation">.</span>textBaseline <span class="token operator">=</span> <span class="token string">'middle'</span><span class="token punctuation">;</span>
            ctx<span class="token punctuation">.</span><span class="token function">fillText</span><span class="token punctuation">(</span><span class="token string">'Ant Design'</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            canvas<span class="token punctuation">.</span><span class="token function">toBlob</span><span class="token punctuation">(</span>resolve<span class="token punctuation">)</span><span class="token punctuation">;</span>
          <span class="token punctuation">}</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token punctuation">{</span>
      transformFile<span class="token punctuation">,</span>
      fileList<span class="token operator">:</span> <span class="token function">ref</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
</code></pre>
            </div>
        </section>
    </section>
    </div>
    <div class="ant-col ant-col-12 code-boxes-col-2-1" style="padding-left: 8px; padding-right: 8px;">
        <section class="code-box" id="components-upload-demo-avatar">
            <section class="code-box-demo"><span class="ant-upload-picture-card-wrapper avatar-uploader"><!----><div class="ant-upload ant-upload-select ant-upload-select-picture-card"><span role="button" tabindex="0" class="ant-upload"><input type="file" accept="" style="display: none;"><div><span role="img" aria-label="plus" class="anticon anticon-plus"><svg focusable="false" class="" data-icon="plus" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><defs><style></style></defs><path d="M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"></path><path d="M176 474h672q8 0 8 8v60q0 8-8 8H176q-8 0-8-8v-60q0-8 8-8z"></path></svg></span>
                <div class="ant-upload-text">Upload</div>
    </div>
    </span>
    </div>
    </span>
    </section>
    <section class="code-box-meta markdown">
        <div class="code-box-title"><a href="#components-upload-demo-avatar">用户头像</a></div>
        <div class="code-box-description">
            <p>点击上传用户头像，并使用 <code>beforeUpload</code> 限制用户上传的图片格式和大小。</p>
            <blockquote>
                <p><code>beforeUpload</code> 的返回值可以是一个 Promise 以支持异步处理，如服务端校验等：<a href="http://react-component.github.io/upload/examples/beforeUpload.html" target="_blank" rel="noopener noreferrer">示例</a>。</p>
            </blockquote>
        </div>
    </section>
    <section class="highlight-wrapper">
        <div class="highlight">
            <pre class="language-vue"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-upload</span>
    <span class="token attr-name"><span class="token namespace">v-model:</span>file-list</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>fileList<span class="token punctuation">"</span></span>
    <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>avatar<span class="token punctuation">"</span></span>
    <span class="token attr-name">list-type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>picture-card<span class="token punctuation">"</span></span>
    <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>avatar-uploader<span class="token punctuation">"</span></span>
    <span class="token attr-name">:show-upload-list</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>false<span class="token punctuation">"</span></span>
    <span class="token attr-name">action</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://www.mocky.io/v2/5cc8019d300000980a055e76<span class="token punctuation">"</span></span>
    <span class="token attr-name">:before-upload</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>beforeUpload<span class="token punctuation">"</span></span>
    <span class="token attr-name">@change</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>handleChange<span class="token punctuation">"</span></span>
  <span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>img</span> <span class="token attr-name">v-if</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>imageUrl<span class="token punctuation">"</span></span> <span class="token attr-name">:src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>imageUrl<span class="token punctuation">"</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>avatar<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">v-else</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>loading-outlined</span> <span class="token attr-name">v-if</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>loading<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>loading-outlined</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>plus-outlined</span> <span class="token attr-name">v-else</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>plus-outlined</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ant-upload-text<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>Upload<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-upload</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ts<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> <span class="token punctuation">{</span> PlusOutlined<span class="token punctuation">,</span> LoadingOutlined <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@ant-design/icons-vue'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> message <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'ant-design-vue'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> defineComponent<span class="token punctuation">,</span> ref <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span><span class="token punctuation">;</span> 
<span class="token keyword">interface</span> <span class="token class-name">FileItem</span> <span class="token punctuation">{</span>
  uid<span class="token operator">:</span> string<span class="token punctuation">;</span>
  name<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  status<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  response<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  url<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  type<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  size<span class="token operator">:</span> number<span class="token punctuation">;</span>
  originFileObj<span class="token operator">:</span> any<span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token keyword">interface</span> <span class="token class-name">FileInfo</span> <span class="token punctuation">{</span>
  file<span class="token operator">:</span> FileItem<span class="token punctuation">;</span>
  fileList<span class="token operator">:</span> FileItem<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token keyword">function</span> <span class="token function">getBase64</span><span class="token punctuation">(</span>img<span class="token operator">:</span> Blob<span class="token punctuation">,</span> <span class="token function-variable function">callback</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token parameter">base64Url<span class="token operator">:</span> string</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token keyword">void</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">const</span> reader <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileReader</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  reader<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'load'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token function">callback</span><span class="token punctuation">(</span>reader<span class="token punctuation">.</span>result <span class="token keyword">as</span> string<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  reader<span class="token punctuation">.</span><span class="token function">readAsDataURL</span><span class="token punctuation">(</span>img<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineComponent</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  components<span class="token operator">:</span> <span class="token punctuation">{</span>
    LoadingOutlined<span class="token punctuation">,</span>
    PlusOutlined<span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> fileList <span class="token operator">=</span> <span class="token function">ref</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">const</span> loading <span class="token operator">=</span> ref<span class="token operator">&lt;</span>boolean<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">const</span> imageUrl <span class="token operator">=</span> ref<span class="token operator">&lt;</span>string<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 
    <span class="token keyword">const</span> <span class="token function-variable function">handleChange</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">info<span class="token operator">:</span> FileInfo</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span>info<span class="token punctuation">.</span>file<span class="token punctuation">.</span>status <span class="token operator">===</span> <span class="token string">'uploading'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        loading<span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span>
        <span class="token keyword">return</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span>info<span class="token punctuation">.</span>file<span class="token punctuation">.</span>status <span class="token operator">===</span> <span class="token string">'done'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token comment">// Get this url from response in real world.</span>
        <span class="token function">getBase64</span><span class="token punctuation">(</span>info<span class="token punctuation">.</span>file<span class="token punctuation">.</span>originFileObj<span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token parameter">base64Url<span class="token operator">:</span> string</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
          imageUrl<span class="token punctuation">.</span>value <span class="token operator">=</span> base64Url<span class="token punctuation">;</span>
          loading<span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span>info<span class="token punctuation">.</span>file<span class="token punctuation">.</span>status <span class="token operator">===</span> <span class="token string">'error'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        loading<span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span>
        message<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'upload error'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span> 
    <span class="token keyword">const</span> <span class="token function-variable function">beforeUpload</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">file<span class="token operator">:</span> FileItem</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">const</span> isJpgOrPng <span class="token operator">=</span> file<span class="token punctuation">.</span>type <span class="token operator">===</span> <span class="token string">'image/jpeg'</span> <span class="token operator">||</span> file<span class="token punctuation">.</span>type <span class="token operator">===</span> <span class="token string">'image/png'</span><span class="token punctuation">;</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>isJpgOrPng<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        message<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'You can only upload JPG file!'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span>
      <span class="token keyword">const</span> isLt2M <span class="token operator">=</span> file<span class="token punctuation">.</span>size <span class="token operator">/</span> <span class="token number">1024</span> <span class="token operator">/</span> <span class="token number">1024</span> <span class="token operator">&lt;</span> <span class="token number">2</span><span class="token punctuation">;</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>isLt2M<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        message<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'Image must smaller than 2MB!'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span>
      <span class="token keyword">return</span> isJpgOrPng <span class="token operator">&amp;&amp;</span> isLt2M<span class="token punctuation">;</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span> 
    <span class="token keyword">return</span> <span class="token punctuation">{</span>
      fileList<span class="token punctuation">,</span>
      loading<span class="token punctuation">,</span>
      imageUrl<span class="token punctuation">,</span>
      handleChange<span class="token punctuation">,</span>
      beforeUpload<span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>style</span><span class="token punctuation">&gt;</span></span><span class="token style"><span class="token language-css">
<span class="token selector">.avatar-uploader &gt; .ant-upload</span> <span class="token punctuation">{</span>
  <span class="token property">width</span><span class="token punctuation">:</span> 128px<span class="token punctuation">;</span>
  <span class="token property">height</span><span class="token punctuation">:</span> 128px<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token selector">.ant-upload-select-picture-card i</span> <span class="token punctuation">{</span>
  <span class="token property">font-size</span><span class="token punctuation">:</span> 32px<span class="token punctuation">;</span>
  <span class="token property">color</span><span class="token punctuation">:</span> #999<span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token selector">.ant-upload-select-picture-card .ant-upload-text</span> <span class="token punctuation">{</span>
  <span class="token property">margin-top</span><span class="token punctuation">:</span> 8px<span class="token punctuation">;</span>
  <span class="token property">color</span><span class="token punctuation">:</span> #666<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>style</span><span class="token punctuation">&gt;</span></span>
</code></pre>
        </div>
    </section>
    </section>
    <section class="code-box" id="components-upload-demo-picture-card">
        <section class="code-box-demo">
            <div class="clearfix"><span class="ant-upload-picture-card-wrapper"><div class="ant-upload-list ant-upload-list-picture-card"><div class="ant-upload-list-picture-card-container"><span><div class="ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-list-type-picture-card"><div class="ant-upload-list-item-info"><span><a class="ant-upload-list-item-thumbnail" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" target="_blank" rel="noopener noreferrer"><img src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" alt="image.png" class="ant-upload-list-item-image"></a><a target="_blank" rel="noopener noreferrer" class="ant-upload-list-item-name ant-upload-list-item-name-icon-count-1" title="image.png" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png">image.png</a><!----></span></div>
            <span class="ant-upload-list-item-actions"><a href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" target="_blank" rel="noopener noreferrer" title="预览文件"><span role="img" aria-label="eye" class="anticon anticon-eye"><svg focusable="false" class="" data-icon="eye" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"></path></svg></span></a>
            <!----><span title="删除文件" tabindex="-1" role="img" aria-label="delete" class="anticon anticon-delete"><svg focusable="false" class="" data-icon="delete" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"></path></svg></span></span>
            <!---->
            </div>
            </span>
            </div>
            <div class="ant-upload-list-picture-card-container"><span><div class="ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-list-type-picture-card"><div class="ant-upload-list-item-info"><span><a class="ant-upload-list-item-thumbnail" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" target="_blank" rel="noopener noreferrer"><img src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" alt="image.png" class="ant-upload-list-item-image"></a><a target="_blank" rel="noopener noreferrer" class="ant-upload-list-item-name ant-upload-list-item-name-icon-count-1" title="image.png" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png">image.png</a><!----></span></div>
            <span class="ant-upload-list-item-actions"><a href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" target="_blank" rel="noopener noreferrer" title="预览文件"><span role="img" aria-label="eye" class="anticon anticon-eye"><svg focusable="false" class="" data-icon="eye" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"></path></svg></span></a>
            <!----><span title="删除文件" tabindex="-1" role="img" aria-label="delete" class="anticon anticon-delete"><svg focusable="false" class="" data-icon="delete" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"></path></svg></span></span>
            <!---->
            </div>
            </span>
            </div>
            <div class="ant-upload-list-picture-card-container"><span><div class="ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-list-type-picture-card"><div class="ant-upload-list-item-info"><span><a class="ant-upload-list-item-thumbnail" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" target="_blank" rel="noopener noreferrer"><img src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" alt="image.png" class="ant-upload-list-item-image"></a><a target="_blank" rel="noopener noreferrer" class="ant-upload-list-item-name ant-upload-list-item-name-icon-count-1" title="image.png" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png">image.png</a><!----></span></div>
            <span class="ant-upload-list-item-actions"><a href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" target="_blank" rel="noopener noreferrer" title="预览文件"><span role="img" aria-label="eye" class="anticon anticon-eye"><svg focusable="false" class="" data-icon="eye" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"></path></svg></span></a>
            <!----><span title="删除文件" tabindex="-1" role="img" aria-label="delete" class="anticon anticon-delete"><svg focusable="false" class="" data-icon="delete" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"></path></svg></span></span>
            <!---->
            </div>
            </span>
            </div>
            <div class="ant-upload-list-picture-card-container"><span><div class="ant-upload-list-item ant-upload-list-item-done ant-upload-list-item-list-type-picture-card"><div class="ant-upload-list-item-info"><span><a class="ant-upload-list-item-thumbnail" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" target="_blank" rel="noopener noreferrer"><img src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" alt="image.png" class="ant-upload-list-item-image"></a><a target="_blank" rel="noopener noreferrer" class="ant-upload-list-item-name ant-upload-list-item-name-icon-count-1" title="image.png" href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png">image.png</a><!----></span></div>
            <span class="ant-upload-list-item-actions"><a href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" target="_blank" rel="noopener noreferrer" title="预览文件"><span role="img" aria-label="eye" class="anticon anticon-eye"><svg focusable="false" class="" data-icon="eye" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"></path></svg></span></a>
            <!----><span title="删除文件" tabindex="-1" role="img" aria-label="delete" class="anticon anticon-delete"><svg focusable="false" class="" data-icon="delete" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"></path></svg></span></span>
            <!---->
            </div>
            </span>
            </div>
            <div class="ant-upload-list-picture-card-container">
                <!---->
                <div class="ant-upload-list-item ant-upload-list-item-error ant-upload-list-item-list-type-picture-card">
                    <div class="ant-upload-list-item-info"><span><span role="img" aria-label="picture" class="anticon anticon-picture ant-upload-list-item-thumbnail"><svg focusable="false" class="" data-icon="picture" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M928 160H96c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32zm-40 632H136v-39.9l138.5-164.3 150.1 178L658.1 489 888 761.6V792zm0-129.8L664.2 396.8c-3.2-3.8-9-3.8-12.2 0L424.6 666.4l-144-170.7c-3.2-3.8-9-3.8-12.2 0L136 652.7V232h752v430.2z" fill="#1890ff"></path><path d="M424.6 765.8l-150.1-178L136 752.1V792h752v-30.4L658.1 489z" fill="#e6f7ff"></path><path d="M136 652.7l132.4-157c3.2-3.8 9-3.8 12.2 0l144 170.7L652 396.8c3.2-3.8 9-3.8 12.2 0L888 662.2V232H136v420.7zM304 280a88 88 0 110 176 88 88 0 010-176z" fill="#e6f7ff"></path><path d="M276 368a28 28 0 1056 0 28 28 0 10-56 0z" fill="#e6f7ff"></path><path d="M304 456a88 88 0 100-176 88 88 0 000 176zm0-116c15.5 0 28 12.5 28 28s-12.5 28-28 28-28-12.5-28-28 12.5-28 28-28z" fill="#1890ff"></path></svg></span>
                        <span class="ant-upload-list-item-name" title="image.png">image.png</span>
                        <!---->
                        </span>
                    </div><span class="ant-upload-list-item-actions"><a target="_blank" rel="noopener noreferrer" title="预览文件" style="pointer-events: none; opacity: 0.5;"><span role="img" aria-label="eye" class="anticon anticon-eye"><svg focusable="false" class="" data-icon="eye" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"></path></svg></span></a>
                    <!----><span title="删除文件" tabindex="-1" role="img" aria-label="delete" class="anticon anticon-delete"><svg focusable="false" class="" data-icon="delete" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"></path></svg></span></span>
                    <!---->
                </div>
            </div>
            </div>
            <div class="ant-upload ant-upload-select ant-upload-select-picture-card"><span role="button" tabindex="0" class="ant-upload"><input type="file" accept="" style="display: none;"><div><span role="img" aria-label="plus" class="anticon anticon-plus"><svg focusable="false" class="" data-icon="plus" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><defs><style></style></defs><path d="M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z"></path><path d="M176 474h672q8 0 8 8v60q0 8-8 8H176q-8 0-8-8v-60q0-8 8-8z"></path></svg></span>
                <div class="ant-upload-text">Upload</div>
            </div>
            </span>
            </div>
            </span>
            <!---->
            </div>
        </section>
        <section class="code-box-meta markdown">
            <div class="code-box-title"><a href="#components-upload-demo-picture-card">照片墙</a></div>
            <div class="code-box-description">
                <p>用户可以上传图片并在列表中显示缩略图。当上传照片数到达限制后，上传按钮消失。</p>
            </div>
        </section>
        <section class="highlight-wrapper">
            <div class="highlight">
                <pre class="language-vue"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>clearfix<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-upload</span>
      <span class="token attr-name">action</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://www.mocky.io/v2/5cc8019d300000980a055e76<span class="token punctuation">"</span></span>
      <span class="token attr-name">list-type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>picture-card<span class="token punctuation">"</span></span>
      <span class="token attr-name"><span class="token namespace">v-model:</span>file-list</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>fileList<span class="token punctuation">"</span></span>
      <span class="token attr-name">@preview</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>handlePreview<span class="token punctuation">"</span></span>
    <span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">v-if</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>fileList.length &lt; 8<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>plus-outlined</span> <span class="token punctuation">/&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ant-upload-text<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>Upload<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-upload</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-modal</span> <span class="token attr-name">:visible</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>previewVisible<span class="token punctuation">"</span></span> <span class="token attr-name">:footer</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>null<span class="token punctuation">"</span></span> <span class="token attr-name">@cancel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>handleCancel<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>img</span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>example<span class="token punctuation">"</span></span> <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">width</span><span class="token punctuation">:</span> 100%</span><span class="token punctuation">"</span></span></span> <span class="token attr-name">:src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>previewImage<span class="token punctuation">"</span></span> <span class="token punctuation">/&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-modal</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ts<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> <span class="token punctuation">{</span> PlusOutlined <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@ant-design/icons-vue'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> defineComponent<span class="token punctuation">,</span> ref <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span><span class="token punctuation">;</span> 
<span class="token keyword">function</span> <span class="token function">getBase64</span><span class="token punctuation">(</span><span class="token parameter">file<span class="token operator">:</span> File</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">resolve<span class="token punctuation">,</span> reject</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> reader <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileReader</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    reader<span class="token punctuation">.</span><span class="token function">readAsDataURL</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span>
    reader<span class="token punctuation">.</span><span class="token function-variable function">onload</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token function">resolve</span><span class="token punctuation">(</span>reader<span class="token punctuation">.</span>result<span class="token punctuation">)</span><span class="token punctuation">;</span>
    reader<span class="token punctuation">.</span><span class="token function-variable function">onerror</span> <span class="token operator">=</span> <span class="token parameter">error</span> <span class="token operator">=&gt;</span> <span class="token function">reject</span><span class="token punctuation">(</span>error<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token keyword">interface</span> <span class="token class-name">FileItem</span> <span class="token punctuation">{</span>
  uid<span class="token operator">:</span> string<span class="token punctuation">;</span>
  name<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  status<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  response<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  percent<span class="token operator">?</span><span class="token operator">:</span> number<span class="token punctuation">;</span>
  url<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  preview<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  originFileObj<span class="token operator">?</span><span class="token operator">:</span> any<span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token keyword">interface</span> <span class="token class-name">FileInfo</span> <span class="token punctuation">{</span>
  file<span class="token operator">:</span> FileItem<span class="token punctuation">;</span>
  fileList<span class="token operator">:</span> FileItem<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineComponent</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  components<span class="token operator">:</span> <span class="token punctuation">{</span>
    PlusOutlined<span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> previewVisible <span class="token operator">=</span> ref<span class="token operator">&lt;</span>boolean<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">const</span> previewImage <span class="token operator">=</span> ref<span class="token operator">&lt;</span>string <span class="token operator">|</span> <span class="token keyword">undefined</span><span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 
    <span class="token keyword">const</span> fileList <span class="token operator">=</span> ref<span class="token operator">&lt;</span>FileItem<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">[</span>
      <span class="token punctuation">{</span>
        uid<span class="token operator">:</span> <span class="token string">'-1'</span><span class="token punctuation">,</span>
        name<span class="token operator">:</span> <span class="token string">'image.png'</span><span class="token punctuation">,</span>
        status<span class="token operator">:</span> <span class="token string">'done'</span><span class="token punctuation">,</span>
        url<span class="token operator">:</span> <span class="token string">'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'</span><span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
      <span class="token punctuation">{</span>
        uid<span class="token operator">:</span> <span class="token string">'-2'</span><span class="token punctuation">,</span>
        name<span class="token operator">:</span> <span class="token string">'image.png'</span><span class="token punctuation">,</span>
        status<span class="token operator">:</span> <span class="token string">'done'</span><span class="token punctuation">,</span>
        url<span class="token operator">:</span> <span class="token string">'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'</span><span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
      <span class="token punctuation">{</span>
        uid<span class="token operator">:</span> <span class="token string">'-3'</span><span class="token punctuation">,</span>
        name<span class="token operator">:</span> <span class="token string">'image.png'</span><span class="token punctuation">,</span>
        status<span class="token operator">:</span> <span class="token string">'done'</span><span class="token punctuation">,</span>
        url<span class="token operator">:</span> <span class="token string">'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'</span><span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
      <span class="token punctuation">{</span>
        uid<span class="token operator">:</span> <span class="token string">'-4'</span><span class="token punctuation">,</span>
        name<span class="token operator">:</span> <span class="token string">'image.png'</span><span class="token punctuation">,</span>
        status<span class="token operator">:</span> <span class="token string">'done'</span><span class="token punctuation">,</span>
        url<span class="token operator">:</span> <span class="token string">'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'</span><span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
      <span class="token punctuation">{</span>
        uid<span class="token operator">:</span> <span class="token string">'-5'</span><span class="token punctuation">,</span>
        name<span class="token operator">:</span> <span class="token string">'image.png'</span><span class="token punctuation">,</span>
        status<span class="token operator">:</span> <span class="token string">'error'</span><span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 
    <span class="token keyword">const</span> <span class="token function-variable function">handleCancel</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      previewVisible<span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
    <span class="token keyword">const</span> <span class="token function-variable function">handlePreview</span> <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token parameter">file<span class="token operator">:</span> FileItem</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>file<span class="token punctuation">.</span>url <span class="token operator">&amp;&amp;</span> <span class="token operator">!</span>file<span class="token punctuation">.</span>preview<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        file<span class="token punctuation">.</span>preview <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">await</span> <span class="token function">getBase64</span><span class="token punctuation">(</span>file<span class="token punctuation">.</span>originFileObj<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">as</span> string<span class="token punctuation">;</span>
      <span class="token punctuation">}</span>
      previewImage<span class="token punctuation">.</span>value <span class="token operator">=</span> file<span class="token punctuation">.</span>url <span class="token operator">||</span> file<span class="token punctuation">.</span>preview<span class="token punctuation">;</span>
      previewVisible<span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
    <span class="token keyword">const</span> <span class="token function-variable function">handleChange</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter"><span class="token punctuation">{</span> fileList<span class="token operator">:</span> newFileList <span class="token punctuation">}</span><span class="token operator">:</span> FileInfo</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      fileList<span class="token punctuation">.</span>value <span class="token operator">=</span> newFileList<span class="token punctuation">;</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span> 
    <span class="token keyword">return</span> <span class="token punctuation">{</span>
      previewVisible<span class="token punctuation">,</span>
      previewImage<span class="token punctuation">,</span>
      fileList<span class="token punctuation">,</span>
      handleCancel<span class="token punctuation">,</span>
      handlePreview<span class="token punctuation">,</span>
      handleChange<span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>style</span><span class="token punctuation">&gt;</span></span><span class="token style"><span class="token language-css">
<span class="token comment">/* you can make up upload button and sample style by using stylesheets */</span>
<span class="token selector">.ant-upload-select-picture-card i</span> <span class="token punctuation">{</span>
  <span class="token property">font-size</span><span class="token punctuation">:</span> 32px<span class="token punctuation">;</span>
  <span class="token property">color</span><span class="token punctuation">:</span> #999<span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token selector">.ant-upload-select-picture-card .ant-upload-text</span> <span class="token punctuation">{</span>
  <span class="token property">margin-top</span><span class="token punctuation">:</span> 8px<span class="token punctuation">;</span>
  <span class="token property">color</span><span class="token punctuation">:</span> #666<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>style</span><span class="token punctuation">&gt;</span></span>
</code></pre>
            </div>
        </section>
    </section>
    <section class="code-box" id="components-upload-demo-drag">
        <section class="code-box-demo"><span><div class="ant-upload ant-upload-drag"><span role="button" tabindex="0" class="ant-upload ant-upload-btn"><input type="file" accept="" multiple="" style="display: none;"><div class="ant-upload-drag-container"><p class="ant-upload-drag-icon"><span role="img" aria-label="inbox" class="anticon anticon-inbox"><svg focusable="false" class="" data-icon="inbox" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="0 0 1024 1024"><path d="M885.2 446.3l-.2-.8-112.2-285.1c-5-16.1-19.9-27.2-36.8-27.2H281.2c-17 0-32.1 11.3-36.9 27.6L139.4 443l-.3.7-.2.8c-1.3 4.9-1.7 9.9-1 14.8-.1 1.6-.2 3.2-.2 4.8V830a60.9 60.9 0 0060.8 60.8h627.2c33.5 0 60.8-27.3 60.9-60.8V464.1c0-1.3 0-2.6-.1-3.7.4-4.9 0-9.6-1.3-14.1zm-295.8-43l-.3 15.7c-.8 44.9-31.8 75.1-77.1 75.1-22.1 0-41.1-7.1-54.8-20.6S436 441.2 435.6 419l-.3-15.7H229.5L309 210h399.2l81.7 193.3H589.4zm-375 76.8h157.3c24.3 57.1 76 90.8 140.4 90.8 33.7 0 65-9.4 90.3-27.2 22.2-15.6 39.5-37.4 50.7-63.6h156.5V814H214.4V480.1z"></path></svg></span></p>
            <p class="ant-upload-text">Click or drag file to this area to upload</p>
            <p class="ant-upload-hint"> Support for a single or bulk upload. Strictly prohibit from uploading company data or other band files </p>
            </div>
            </span>
            </div>
            <div class="ant-upload-list ant-upload-list-text"></div>
            </span>
        </section>
        <section class="code-box-meta markdown">
            <div class="code-box-title"><a href="#components-upload-demo-drag">拖拽上传</a></div>
            <div class="code-box-description">
                <p>把文件拖入指定区域，完成上传，同样支持点击上传。</p>
                <p>设置 <code>multiple</code> 后，在 <code>IE10+</code> 可以一次上传多个文件。</p>
            </div>
        </section>
        <section class="highlight-wrapper">
            <div class="highlight">
                <pre class="language-vue"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-upload-dragger</span>
    <span class="token attr-name"><span class="token namespace">v-model:</span>fileList</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>fileList<span class="token punctuation">"</span></span>
    <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>file<span class="token punctuation">"</span></span>
    <span class="token attr-name">:multiple</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span>
    <span class="token attr-name">action</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://www.mocky.io/v2/5cc8019d300000980a055e76<span class="token punctuation">"</span></span>
    <span class="token attr-name">@change</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>handleChange<span class="token punctuation">"</span></span>
  <span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ant-upload-drag-icon<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>inbox-outlined</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>inbox-outlined</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ant-upload-text<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>Click or drag file to this area to upload<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ant-upload-hint<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
      Support for a single or bulk upload. Strictly prohibit from uploading company data or other
      band files
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-upload-dragger</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ts<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> <span class="token punctuation">{</span> InboxOutlined <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@ant-design/icons-vue'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> message <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'ant-design-vue'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> defineComponent<span class="token punctuation">,</span> ref <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span><span class="token punctuation">;</span> 
<span class="token keyword">interface</span> <span class="token class-name">FileItem</span> <span class="token punctuation">{</span>
  uid<span class="token operator">:</span> string<span class="token punctuation">;</span>
  name<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  status<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  response<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  url<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token keyword">interface</span> <span class="token class-name">FileInfo</span> <span class="token punctuation">{</span>
  file<span class="token operator">:</span> FileItem<span class="token punctuation">;</span>
  fileList<span class="token operator">:</span> FileItem<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineComponent</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  components<span class="token operator">:</span> <span class="token punctuation">{</span>
    InboxOutlined<span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> <span class="token function-variable function">handleChange</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">info<span class="token operator">:</span> FileInfo</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">const</span> status <span class="token operator">=</span> info<span class="token punctuation">.</span>file<span class="token punctuation">.</span>status<span class="token punctuation">;</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span>status <span class="token operator">!==</span> <span class="token string">'uploading'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>info<span class="token punctuation">.</span>file<span class="token punctuation">,</span> info<span class="token punctuation">.</span>fileList<span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span>
      <span class="token keyword">if</span> <span class="token punctuation">(</span>status <span class="token operator">===</span> <span class="token string">'done'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        message<span class="token punctuation">.</span><span class="token function">success</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>info<span class="token punctuation">.</span>file<span class="token punctuation">.</span>name<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> file uploaded successfully.</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>status <span class="token operator">===</span> <span class="token string">'error'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
        message<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>info<span class="token punctuation">.</span>file<span class="token punctuation">.</span>name<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> file upload failed.</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token punctuation">{</span>
      handleChange<span class="token punctuation">,</span>
      fileList<span class="token operator">:</span> <span class="token function">ref</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
</code></pre>
            </div>
        </section>
    </section>
    <section class="code-box" id="components-upload-demo-upload-manually">
        <section class="code-box-demo">
            <div class="clearfix"><span><div class="ant-upload ant-upload-select ant-upload-select-text"><span role="button" tabindex="0" class="ant-upload"><input type="file" accept="" style="display: none;"><button class="ant-btn" type="button"><!----><span role="img" aria-label="upload" class="anticon anticon-upload"><svg focusable="false" class="" data-icon="upload" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"></path></svg></span><span>Select File</span></button>
                </span>
            </div>
            <div class="ant-upload-list ant-upload-list-text"></div>
            </span><button disabled="" class="ant-btn ant-btn-primary" type="button" style="margin-top: 16px;"><!----><span>Start Upload</span></button></div>
        </section>
        <section class="code-box-meta markdown">
            <div class="code-box-title"><a href="#components-upload-demo-upload-manually">手动上传</a></div>
            <div class="code-box-description">
                <p><code>beforeUpload</code> 返回 <code>false</code> 后，手动上传文件。</p>
            </div>
        </section>
        <section class="highlight-wrapper">
            <div class="highlight">
                <pre class="language-vue"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>clearfix<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-upload</span> <span class="token attr-name">:file-list</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>fileList<span class="token punctuation">"</span></span> <span class="token attr-name">:remove</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>handleRemove<span class="token punctuation">"</span></span> <span class="token attr-name">:before-upload</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>beforeUpload<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-button</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>upload-outlined</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>upload-outlined</span><span class="token punctuation">&gt;</span></span>
        Select File
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-button</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-upload</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-button</span>
      <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>primary<span class="token punctuation">"</span></span>
      <span class="token attr-name">:disabled</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>fileList.length === 0<span class="token punctuation">"</span></span>
      <span class="token attr-name">:loading</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>uploading<span class="token punctuation">"</span></span>
      <span class="token special-attr"><span class="token attr-name">style</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token value css language-css"><span class="token property">margin-top</span><span class="token punctuation">:</span> 16px</span><span class="token punctuation">"</span></span></span>
      <span class="token attr-name">@click</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>handleUpload<span class="token punctuation">"</span></span>
    <span class="token punctuation">&gt;</span></span>
      {{ uploading ? 'Uploading' : 'Start Upload' }}
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-button</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ts<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> request <span class="token keyword">from</span> <span class="token string">'umi-request'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> UploadOutlined <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@ant-design/icons-vue'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> message <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'ant-design-vue'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> defineComponent<span class="token punctuation">,</span> ref <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span><span class="token punctuation">;</span> 
<span class="token keyword">interface</span> <span class="token class-name">FileItem</span> <span class="token punctuation">{</span>
  uid<span class="token operator">:</span> string<span class="token punctuation">;</span>
  name<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  status<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  response<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  url<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  preview<span class="token operator">?</span><span class="token operator">:</span> string<span class="token punctuation">;</span>
  originFileObj<span class="token operator">?</span><span class="token operator">:</span> any<span class="token punctuation">;</span>
  file<span class="token operator">:</span> string <span class="token operator">|</span> Blob<span class="token punctuation">;</span>
<span class="token punctuation">}</span> 
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineComponent</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  components<span class="token operator">:</span> <span class="token punctuation">{</span>
    UploadOutlined<span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> fileList <span class="token operator">=</span> ref<span class="token operator">&lt;</span>FileItem<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">const</span> uploading <span class="token operator">=</span> ref<span class="token operator">&lt;</span>boolean<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 
    <span class="token keyword">const</span> <span class="token function-variable function">handleRemove</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">file<span class="token operator">:</span> FileItem</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">const</span> index <span class="token operator">=</span> fileList<span class="token punctuation">.</span>value<span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token keyword">const</span> newFileList <span class="token operator">=</span> fileList<span class="token punctuation">.</span>value<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      newFileList<span class="token punctuation">.</span><span class="token function">splice</span><span class="token punctuation">(</span>index<span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      fileList<span class="token punctuation">.</span>value <span class="token operator">=</span> newFileList<span class="token punctuation">;</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span> 
    <span class="token keyword">const</span> <span class="token function-variable function">beforeUpload</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">file<span class="token operator">:</span> FileItem</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      fileList<span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token operator">...</span>fileList<span class="token punctuation">.</span>value<span class="token punctuation">,</span> file<span class="token punctuation">]</span><span class="token punctuation">;</span>
      <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span> 
    <span class="token keyword">const</span> <span class="token function-variable function">handleUpload</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">const</span> formData <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FormData</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      fileList<span class="token punctuation">.</span>value<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">file<span class="token operator">:</span> FileItem</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
        formData<span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span><span class="token string">'files[]'</span><span class="token punctuation">,</span> file <span class="token keyword">as</span> any<span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      uploading<span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span> 
      <span class="token comment">// You can use any AJAX library you like</span>
      <span class="token function">request</span><span class="token punctuation">(</span><span class="token string">'https://www.mocky.io/v2/5cc8019d300000980a055e76'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>
        method<span class="token operator">:</span> <span class="token string">'post'</span><span class="token punctuation">,</span>
        data<span class="token operator">:</span> formData<span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span>
        <span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
          fileList<span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
          uploading<span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span>
          message<span class="token punctuation">.</span><span class="token function">success</span><span class="token punctuation">(</span><span class="token string">'upload successfully.'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span><span class="token punctuation">)</span>
        <span class="token punctuation">.</span><span class="token function">catch</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
          uploading<span class="token punctuation">.</span>value <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span>
          message<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'upload failed.'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span> 
    <span class="token keyword">return</span> <span class="token punctuation">{</span>
      fileList<span class="token punctuation">,</span>
      uploading<span class="token punctuation">,</span>
      handleRemove<span class="token punctuation">,</span>
      beforeUpload<span class="token punctuation">,</span>
      handleUpload<span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
</code></pre>
            </div>
        </section>
    </section>
    <section class="code-box" id="components-upload-demo-preview-file">
        <section class="code-box-demo">
            <div><span><div class="ant-upload ant-upload-select ant-upload-select-picture"><span role="button" tabindex="0" class="ant-upload"><input type="file" accept="" style="display: none;"><button class="ant-btn" type="button"><!----><span role="img" aria-label="upload" class="anticon anticon-upload"><svg focusable="false" class="" data-icon="upload" width="1em" height="1em" fill="currentColor" aria-hidden="true" viewBox="64 64 896 896"><path d="M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"></path></svg></span><span>Upload</span></button>
                </span>
            </div>
            <div class="ant-upload-list ant-upload-list-picture"></div>
            </span>
            </div>
        </section>
        <section class="code-box-meta markdown">
            <div class="code-box-title"><a href="#components-upload-demo-preview-file">自定义预览</a></div>
            <div class="code-box-description">
                <p>自定义本地预览，用于处理非图片格式文件（例如视频文件）。</p>
            </div>
        </section>
        <section class="highlight-wrapper">
            <div class="highlight">
                <pre class="language-vue"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>template</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-upload</span>
      <span class="token attr-name">list-type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>picture<span class="token punctuation">"</span></span>
      <span class="token attr-name">action</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>//jsonplaceholder.typicode.com/posts/<span class="token punctuation">"</span></span>
      <span class="token attr-name">:preview-file</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>previewFile<span class="token punctuation">"</span></span>
      <span class="token attr-name"><span class="token namespace">v-model:</span>file-list</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>fileList<span class="token punctuation">"</span></span>
    <span class="token punctuation">&gt;</span></span>
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a-button</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>upload-outlined</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>upload-outlined</span><span class="token punctuation">&gt;</span></span>
        Upload
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-button</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a-upload</span><span class="token punctuation">&gt;</span></span>
  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>template</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>script</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ts<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token script"><span class="token language-javascript">
<span class="token keyword">import</span> <span class="token punctuation">{</span> UploadOutlined <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@ant-design/icons-vue'</span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token punctuation">{</span> defineComponent<span class="token punctuation">,</span> ref <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span><span class="token punctuation">;</span> 
<span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token function">defineComponent</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
  components<span class="token operator">:</span> <span class="token punctuation">{</span>
    UploadOutlined<span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
  <span class="token function">setup</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> previewFile <span class="token operator">=</span> <span class="token keyword">async</span> <span class="token punctuation">(</span>file<span class="token operator">:</span> any<span class="token punctuation">)</span><span class="token operator">:</span> Promise<span class="token operator">&lt;</span>Response<span class="token operator">&gt;</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'Your upload file:'</span><span class="token punctuation">,</span> file<span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token comment">// Your process logic. Here we just mock to the same file</span>
      <span class="token keyword">const</span> res <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">fetch</span><span class="token punctuation">(</span><span class="token string">'https://next.json-generator.com/api/json/get/4ytyBoLK8'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>
        method<span class="token operator">:</span> <span class="token string">'POST'</span><span class="token punctuation">,</span>
        body<span class="token operator">:</span> file<span class="token punctuation">,</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token keyword">const</span> <span class="token punctuation">{</span> thumbnail <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token keyword">await</span> res<span class="token punctuation">.</span><span class="token function">json</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
      <span class="token keyword">return</span> thumbnail<span class="token punctuation">;</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token punctuation">{</span>
      previewFile<span class="token punctuation">,</span>
      fileList<span class="token operator">:</span> <span class="token function">ref</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>script</span><span class="token punctuation">&gt;</span></span>
</code></pre>
            </div>
        </section>
    </section>
    </div>
    </div>
    <!---->
    <section class="markdown api-container">
        <h2 id="API"><span>API</span><a href="#API" class="anchor">#</a></h2> 
        <table class="docTable">
            <thead>
                <tr>
                    <th>参数</th>
                    <th>说明</th>
                    <th>类型</th>
                    <th>默认值</th>
                    <th>版本</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>accept</td>
                    <td>接受上传的文件类型, 详见 <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept" target="_blank" rel="noopener noreferrer">input accept Attribute</a></td>
                    <td>string</td>
                    <td>无</td>
                    <td></td>
                </tr>
                <tr>
                    <td>action</td>
                    <td>上传的地址</td>
                    <td>string|(file) =&gt; <code>Promise</code></td>
                    <td>无</td>
                    <td></td>
                </tr>
                <tr>
                    <td>method</td>
                    <td>上传请求的 http method</td>
                    <td>string</td>
                    <td>'post'</td>
                    <td>1.5.0</td>
                </tr>
                <tr>
                    <td>directory</td>
                    <td>支持上传文件夹（<a href="https://caniuse.com/#feat=input-file-directory" target="_blank" rel="noopener noreferrer">caniuse</a>）</td>
                    <td>boolean</td>
                    <td>false</td>
                    <td></td>
                </tr>
                <tr>
                    <td>beforeUpload</td>
                    <td>上传文件之前的钩子，参数为上传的文件，若返回 <code>false</code> 则停止上传。支持返回一个 Promise 对象，Promise 对象 reject 时则停止上传，resolve 时开始上传（ resolve 传入 <code>File</code> 或 <code>Blob</code> 对象则上传 resolve 传入对象）。<strong>注意：IE9 不支持该方法</strong>。</td>
                    <td>(file, fileList) =&gt; <code>boolean | Promise</code></td>
                    <td>无</td>
                    <td></td>
                </tr>
                <tr>
                    <td>customRequest</td>
                    <td>通过覆盖默认的上传行为，可以自定义自己的上传实现</td>
                    <td>Function</td>
                    <td>无</td>
                    <td></td>
                </tr>
                <tr>
                    <td>data</td>
                    <td>上传所需参数或返回上传参数的方法</td>
                    <td>object|(file) =&gt; object</td>
                    <td>无</td>
                    <td></td>
                </tr>
                <tr>
                    <td>disabled</td>
                    <td>是否禁用</td>
                    <td>boolean</td>
                    <td>false</td>
                    <td></td>
                </tr>
                <tr>
                    <td>fileList</td>
                    <td>已经上传的文件列表（受控）</td>
                    <td>object[]</td>
                    <td>无</td>
                    <td></td>
                </tr>
                <tr>
                    <td>headers</td>
                    <td>设置上传的请求头部，IE10 以上有效</td>
                    <td>object</td>
                    <td>无</td>
                    <td></td>
                </tr>
                <tr>
                    <td>listType</td>
                    <td>上传列表的内建样式，支持三种基本样式 <code>text</code>, <code>picture</code> 和 <code>picture-card</code></td>
                    <td>string</td>
                    <td>'text'</td>
                    <td></td>
                </tr>
                <tr>
                    <td>multiple</td>
                    <td>是否支持多选文件，<code>ie10+</code> 支持。开启后按住 ctrl 可选择多个文件。</td>
                    <td>boolean</td>
                    <td>false</td>
                    <td></td>
                </tr>
                <tr>
                    <td>name</td>
                    <td>发到后台的文件参数名</td>
                    <td>string</td>
                    <td>'file'</td>
                    <td></td>
                </tr>
                <tr>
                    <td>previewFile</td>
                    <td>自定义文件预览逻辑</td>
                    <td>(file: File | Blob) =&gt; Promise&lt;dataURL: string&gt;</td>
                    <td>无</td>
                    <td>1.5.0</td>
                </tr>
                <tr>
                    <td>showUploadList</td>
                    <td>是否展示 uploadList, 可设为一个对象，用于单独设定 showPreviewIcon 和 showRemoveIcon</td>
                    <td>Boolean or { showPreviewIcon?: boolean, showRemoveIcon?: boolean }</td>
                    <td>true</td>
                    <td></td>
                </tr>
                <tr>
                    <td>supportServerRender</td>
                    <td>服务端渲染时需要打开这个</td>
                    <td>boolean</td>
                    <td>false</td>
                    <td></td>
                </tr>
                <tr>
                    <td>withCredentials</td>
                    <td>上传请求时是否携带 cookie</td>
                    <td>boolean</td>
                    <td>false</td>
                    <td></td>
                </tr>
                <tr>
                    <td>openFileDialogOnClick</td>
                    <td>点击打开文件对话框</td>
                    <td>boolean</td>
                    <td>true</td>
                    <td></td>
                </tr>
                <tr>
                    <td>remove</td>
                    <td>点击移除文件时的回调，返回值为 false 时不移除。支持返回一个 Promise 对象，Promise 对象 resolve(false) 或 reject 时不移除。</td>
                    <td>Function(file): <code>boolean | Promise</code></td>
                    <td>无</td>
                    <td></td>
                </tr>
                <tr>
                    <td>transformFile</td>
                    <td>在上传之前转换文件。支持返回一个 Promise 对象</td>
                    <td>Function(file): <code>string | Blob | File | Promise&lt;string | Blob | File&gt;</code></td>
                    <td>无</td>
                    <td>1.5.0</td>
                </tr>
            </tbody>
        </table>
        <h3 id="事件">事件</h3>
        <table class="docTable">
            <thead>
                <tr>
                    <th>事件名称</th>
                    <th>说明</th>
                    <th>回调参数</th>
                    <th>版本</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>change</td>
                    <td>上传文件改变时的状态，详见 <a href="#change">change</a></td>
                    <td>Function</td>
                    <td>无</td>
                </tr>
                <tr>
                    <td>preview</td>
                    <td>点击文件链接或预览图标时的回调</td>
                    <td>Function(file)</td>
                    <td>无</td>
                </tr>
                <tr>
                    <td>download</td>
                    <td>点击下载文件时的回调，如果没有指定，则默认跳转到文件 url 对应的标签页。</td>
                    <td>Function(file): void</td>
                    <td>跳转新标签页</td>
                </tr>
                <tr>
                    <td>reject</td>
                    <td>拖拽文件不符合 accept 类型时的回调</td>
                    <td>Function(fileList)</td>
                    <td>无</td>
                </tr>
            </tbody>
        </table>
        <h3 id="change">change</h3>
        <blockquote>
            <p>上传中、完成、失败都会调用这个函数。</p>
        </blockquote>
        <p>文件状态改变的回调，返回为：</p>
        <pre class="language-jsx" v-pre=""><code><span class="token punctuation">{</span>
  file<span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token comment">/* ... */</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
  fileList<span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token comment">/* ... */</span> <span class="token punctuation">]</span><span class="token punctuation">,</span>
  event<span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token comment">/* ... */</span> <span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span>
</code></pre>
        <ol>
            <li>
                <p><code>file</code> 当前操作的文件对象。</p>
                <pre class="language-jsx" v-pre=""><code><span class="token punctuation">{</span>
   uid<span class="token operator">:</span> <span class="token string">'uid'</span><span class="token punctuation">,</span>      <span class="token comment">// 文件唯一标识，建议设置为负数，防止和内部产生的 id 冲突</span>
   name<span class="token operator">:</span> <span class="token string">'xx.png'</span><span class="token punctuation">,</span>   <span class="token comment">// 文件名</span>
   status<span class="token operator">:</span> <span class="token string">'done'</span><span class="token punctuation">,</span> <span class="token comment">// 状态有：uploading done error removed</span>
   response<span class="token operator">:</span> <span class="token string">'{"status": "success"}'</span><span class="token punctuation">,</span> <span class="token comment">// 服务端响应内容</span>
   linkProps<span class="token operator">:</span> <span class="token string">'{"download": "image"}'</span><span class="token punctuation">,</span> <span class="token comment">// 下载链接额外的 HTML 属性</span>
   xhr<span class="token operator">:</span> <span class="token string">'XMLHttpRequest{ ... }'</span><span class="token punctuation">,</span> <span class="token comment">// XMLHttpRequest Header</span>
<span class="token punctuation">}</span>
</code></pre>
            </li>
            <li>
                <p><code>fileList</code> 当前的文件列表。</p>
            </li>
            <li>
                <p><code>event</code> 上传中的服务端响应内容，包含了上传进度等信息，高级浏览器支持。</p>
            </li>
        </ol> 
    </section>
</article>