# Téléversement
Téléversement de fichiers. La bibliothèque n'intègre pas de client HTTP : c'est la prop request qui prend en charge le transfert effectif (onProgress renvoie la progression, et la résolution de la Promise équivaut à un succès) ; le glisser-déposer, la sélection multiple, les contraintes de nombre / taille / type et le réessai après échec sont pris en charge.
<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">Choisir des fichiers (3 maximum, 2 Mo par fichier)</LhButton>
</LhUpload>
<LhUpload drag :request="fakeRequest">
<div style="padding: 20px 0">
<p class="demo-note" style="font-size: 14px">Glissez les fichiers ici, ou cliquez pour téléverser</p>
<p class="demo-note">Glisser-déposer pris en charge (mode drag)</p>
</div>
</LhUpload>
<LhUpload multiple :max-count="5" accept=".png,.jpg" :request="fakeRequest" disabled>
<LhButton disabled>État désactivé (accept sous forme de tableau : .png, .jpg)</LhButton>
</LhUpload>
<p class="demo-note">État : {{ status }}</p>
</div>
</template>
<script>
export default {
data: () => ({
status: "(aucun téléversement)",
}),
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 = `La liste contient ${files.length} fichier(s)`
},
onSuccess(file) {
var _a
this.status = `Téléversement réussi : ${(_a = file.name) !== null && _a !== void 0 ? _a : ''}`
},
onError(file, reason) {
var _a
this.status = `Échec du téléversement : ${(_a = file.name) !== null && _a !== void 0 ? _a : ''} (${String(reason)})`
},
},
}
</script>
# Props
| Prop | Description | Type | Valeur par défaut |
|---|---|---|---|
| multiple | Sélection multiple | boolean | false |
| drag | Mode de téléversement par glisser-déposer | boolean | false |
| disabled | Désactivé | boolean | false |
| accept | Types de fichiers acceptés ('.png,.jpg' ou tableau) | string \| string[] | — |
| maxSize | Taille maximale par fichier (octets) | number | — |
| maxCount | Nombre maximal de fichiers (0 = illimité) | number | 0 |
| request | Fonction de requête de téléversement (la bibliothèque n'intègre pas de client HTTP) | LhUploadRequest | — |
| sx | Propriétés de mise en page rapide | — | — |
Signature de LhUploadRequest : (options: { file: File; onProgress: (percent: number) => void }) => Promise<{ url?: string }> —
la résolution de la Promise déclenche success, son rejet (ou une erreur levée) déclenche error.
# Events
change (files), success (file), error (file, reason), remove (uid)
# Slots
| Slot | Description |
|---|---|
| default | Contenu de la zone de déclenchement (rendu par défaut : « cliquer pour téléverser / glisser ici ») |
# Accessibilité
La zone de déclenchement est role="button" + tabindex (Entrée / Espace ouvre le sélecteur de fichiers), et aria-disabled signale la désactivation ;
les lignes des fichiers en cours de téléversement portent role="progressbar" + aria-valuenow, et les messages d'erreur de validation role="alert".
Copyright © 2024-2026 FengMo WenXue