# Upload 上傳

檔案上傳。庫不內建 HTTP 用戶端:由 request prop 接管實際傳輸(onProgress 回填進度,Promise resolve 即成功);支援拖曳、多選、數量 / 大小 / 類型約束與失敗重試。

上傳
<template>
  <div class="demo-col">
    <LhUpload
      multiple
      :max-count="3"
      :max-size="2097152"
      accept="image/*"
      :request="fakeRequest"
      @change="onChange"
      @success="onSuccess"
      @error="onError"
    >
      <LhButton type="primary">選擇檔案(最多 3 個,單個 ≤ 2MB)</LhButton>
    </LhUpload>
    <LhUpload drag :request="fakeRequest">
      <div style="padding: 20px 0">
        <p class="demo-note" style="font-size: 14px">將檔案拖到此處,或點選上傳</p>
        <p class="demo-note">支援拖曳(drag 模式)</p>
      </div>
    </LhUpload>
    <LhUpload multiple :max-count="5" accept=".png,.jpg" :request="fakeRequest" disabled>
      <LhButton disabled>停用態(accept 陣列形式 .png/.jpg)</LhButton>
    </LhUpload>
    <p class="demo-note">狀態:{{ status }}</p>
  </div>
</template>

<script>
export default {
  data: () => ({
    status: '(未上傳)',
  }),
  methods: {
    fakeRequest(opts) {
      const { file, onProgress } = opts
      return new Promise((resolve) => {
        let percent = 0
        const timer = setInterval(() => {
          percent += 25
          if (percent >= 100) {
            clearInterval(timer)
            onProgress(100)
            resolve({ url: `/assets/${file.name}` })
          } else {
            onProgress(percent)
          }
        }, 200)
      })
    },
    onChange(files) {
      this.status = `列表共 ${files.length} 個檔案`
    },
    onSuccess(file) {
      var _a
      this.status = `上傳成功:${(_a = file.name) !== null && _a !== void 0 ? _a : ''}`
    },
    onError(file, reason) {
      var _a
      this.status = `上傳失敗:${(_a = file.name) !== null && _a !== void 0 ? _a : ''}(${String(reason)})`
    },
  },
}
</script>

# Props

屬性 說明 類型 預設值
multiple 多選 boolean false
drag 拖曳上傳模式 boolean false
disabled 停用 boolean false
accept 接受的檔案類型('.png,.jpg' 或陣列) string \| string[] —
maxSize 單檔案大小上限(位元組) number —
maxCount 檔案數量上限(0 為不限) number 0
request 上傳請求函式(庫不內建 HTTP 用戶端) LhUploadRequest —
sx sx 快速佈局屬性 — —

LhUploadRequest 簽名:(options: { file: File; onProgress: (percent: number) => void }) => Promise<{ url?: string }>—— Promise resolve 觸發 success,reject(或拋錯)觸發 error。

# Events

change (files)、success (file)、error (file, reason)、remove (uid)

# Slots

插槽 說明
default 觸發區內容(缺省渲染「點選上傳 / 拖到此處」提示)

# 無障礙

觸發區 role="button" + tabindex(支援 Enter / 空格開啟檔案框),aria-disabled 標明停用; 上傳中的檔案行帶 role="progressbar" + aria-valuenow,校驗失敗提示 role="alert"。

Copyright © 2024-2026 风默文学 | 宁ICP备2024006574号 | 公安备案徽标苏公网安备32040002010537