Fra i tipi di campo disponibili per la compilazione dei form HTML è disponibile anche il tipo file. Questi campi di input consentono l’upload di uno o più file attraverso l’invio del form.
In questa pagina vengono presentate varianti grafiche e funzionali per questo tipo di input.
Upload con lista di file
All’interno di un <form> inserire un campo input di tipo file con classe .upload, seguito da una label il cui attributo for="" deve corrispondere con il name e l’id del campo input.
I file caricati sono elencati come elementi <li> di una lista <ul> con classe .upload-file-list.
Ogni elemento può avere tre differenti stati e relative classi:
.loading per i file in caricamento
.success per i file caricati correttamente
.error in caso di errori
Accessibilità
Come è evidente dall’esempio sottostante è sempre necessario includere informazioni accessibili relative allo stato quando questo è comunicato solamente attraverso elementi grafici come icone o colori.
Alle icone SVG rappresentative dei file si sostituiscono le thumbnail delle immagini caricate.
Alla lista <ul> con classe .upload-file-list va aggiunta la classe .upload-file-list-image.
Il componente ottimizza la visualizzazione delle immagini anche quando queste non hanno proporzione quadrata, si consiglia comunque di utilizzare immagini dal peso contenuto.
Questo elemento combina la visualizzazione dell’immagine Avatar con l’input tipo file per permettere l’upload di una nuova immagine.
L’Avatar contenuto ha la classe specifica .avatar-upload ed è sempre di tipo .size-xxl.
È possibile utilizzare due dimensioni: quella piccola si ottiene aggiungendo la classe .size-sm al wrapper <div class="avatar-upload-wrapper">.
Ci si aspetta venga caricato un solo file (immagine) il form non ha quindi l’attributo multiple="multiple".
L’elemento ha design e comportamento differenti in versione mobile si consiglia quindi di ridurre le dimensioni della finestra del browser per testare questa versione.
Per gestire il caricamento di una serie di foto e l’anteprima delle stesse in forma di Gallery con thumbnail, includere un input file con classi .upload e .pictures-wall come elemento <li> di una lista <ul> con classe .upload-file-wall.
Le immagini caricate andranno aggiunte in testa alla lista <ul> come elementi <li> con classe upload-image.
Anche in questo caso, nonostante il componente ottimizzi la visualizzazione delle immagini quando queste non hanno proporzione quadrata, si consiglia comunque di utilizzare immagini dal peso contenuto.
Questa versione dell’upload permette all’utente di trascinare sull’icona che la caratterizza un file dal proprio dispositivo.
In questo caso è l’interno form ad avere una classe specifica upload-dragdrop e l’attributo data-bs-upload-dragdrop alla quale possono essere aggiunte due ulteriori classi per la gestione degli stati:
.dragover quando un file è trascinato sull’icona
.loading quando un file è rilasciato sull’icona
.success quando un file è stato caricato con successo
I primi due stati sono gestiti dal codice JS incluso nello UI-Kit, lo stato di success dipende dal caricamento corretto del file sul server e va quindi gestito da chi svilupperà il font/back-end del sito o webapp.
<p><strong>Default</strong></p><formclass="upload-dragdrop"method="post"action=""enctype="multipart/form-data"data-bs-upload-dragdrop><divclass="upload-dragdrop-image"><imgsrc="/bootstrap-italia/dist/assets/upload-drag-drop-icon.svg"alt="descrizione immagine"aria-hidden="true"><divclass="upload-dragdrop-loading"><divclass="progress-donut"data-bs-progress-donut></div></div><divclass="upload-dragdrop-success"><svgclass="icon"aria-hidden="true"><usehref="/bootstrap-italia/dist/svg/sprites.svg#it-check"></use></svg></div></div><divclass="upload-dragdrop-text"><pclass="upload-dragdrop-weight"><svgclass="icon icon-xs"aria-hidden="true"><usehref="/bootstrap-italia/dist/svg/sprites.svg#it-file"></use></svg> PDF (3.7MB)
</p><h5>Trascina il file per caricarlo</h5><p>oppure <inputtype="file"name="upload7"id="upload7"class="upload-dragdrop-input"/><labelfor="upload7">selezionalo dal dispositivo</label></p></div><inputvalue="Submit"type="submit"class="d-none"/></form><pclass="mt-5"><strong>Simula caricamento</strong></p><formclass="upload-dragdrop loading"method="post"action=""enctype="multipart/form-data"data-bs-upload-dragdrop><divclass="upload-dragdrop-image"><imgsrc="/bootstrap-italia/dist/assets/upload-drag-drop-icon.svg"alt="descrizione immagine"aria-hidden="true"><divclass="upload-dragdrop-loading"><divclass="progress-donut"data-bs-progress-donut></div></div><divclass="upload-dragdrop-success"><svgclass="icon"aria-hidden="true"><usehref="/bootstrap-italia/dist/svg/sprites.svg#it-check"></use></svg></div></div><divclass="upload-dragdrop-text"><pclass="upload-dragdrop-weight"><svgclass="icon icon-xs"aria-hidden="true"><usehref="/bootstrap-italia/dist/svg/sprites.svg#it-file"></use></svg> PDF (3.7MB)
</p><h5>Nome file in caricamento</h5><p>Caricamento in corso...</p></div><inputvalue="Submit"type="submit"class="d-none"/></form><pclass="mt-5"><strong>Processo completato</strong></p><formclass="upload-dragdrop success"method="post"action=""enctype="multipart/form-data"data-bs-upload-dragdrop><divclass="upload-dragdrop-image"><imgsrc="/bootstrap-italia/dist/assets/upload-drag-drop-icon.svg"alt="descrizione immagine"aria-hidden="true"><divclass="upload-dragdrop-loading"><divclass="progress-donut"data-bs-progress-donut></div></div><divclass="upload-dragdrop-success"><svgclass="icon"aria-hidden="true"><usehref="/bootstrap-italia/dist/svg/sprites.svg#it-check"></use></svg></div></div><divclass="upload-dragdrop-text"><pclass="upload-dragdrop-weight"><svgclass="icon icon-xs"aria-hidden="true"><usehref="/bootstrap-italia/dist/svg/sprites.svg#it-file"></use></svg> PDF (3.7MB)
</p><h5>Nome file caricato</h5><p>Caricamento completato</p></div><inputvalue="Submit"type="submit"class="d-none"/></form>
<p><buttontype="button"class="btn btn-primary"onClick="testAnimation()">Simula Upload</button></p><formclass="upload-dragdrop"method="post"action=""enctype="multipart/form-data"id="uploadChangeStateTarget"data-bs-upload-dragdrop><divclass="upload-dragdrop-image"><imgsrc="/bootstrap-italia/dist/assets/upload-drag-drop-icon.svg"alt="descrizione immagine"aria-hidden="true"><divclass="upload-dragdrop-loading"><divclass="progress-donut"data-bs-progress-donut></div></div><divclass="upload-dragdrop-success"><svgclass="icon"aria-hidden="true"><usehref="/bootstrap-italia/dist/svg/sprites.svg#it-check"></use></svg></div></div><divclass="upload-dragdrop-text"><pclass="upload-dragdrop-weight"><svgclass="icon icon-xs"aria-hidden="true"><usehref="/bootstrap-italia/dist/svg/sprites.svg#it-file"></use></svg> PDF (3.7MB)
</p><h5id="simTitle">Trascina il file per caricarlo</h5><pid="simText">oppure <inputtype="file"name="upload8"id="upload8"class="upload-dragdrop-input"/><labelfor="upload8">selezionalo dal dispositivo</label></p></div><inputvalue="Submit"type="submit"class="d-none"/></form><script>//attiva tooltip esempio loadingfunctiontestAnimation(){varelement=bootstrap.UploadDragDrop.getOrCreateInstance(document.getElementById('uploadChangeStateTarget'));vartitle=document.getElementById('simTitle')vartext=document.getElementById('simText')element.start();title.innerText='nome_file.pdf';text.innerText='Caricamento in corso...';setTimeout(function(){element.progress(0.33)},1000);setTimeout(function(){element.progress(0.66)},2000);setTimeout(function(){element.progress(0.99)},3000);setTimeout(function(){element.success()text.innerText='Caricamento completato'},4500);}</script>
Attivazione tramite codice
Nel caso in cui si desidera che il componente sia inizializzato in maniera automatica
utilizzare l’attributo data-bs-upload-dragdrop per la sua inizializzazione.
Nel caso in cui si desidera importare e inizializzare autonomamente il componente
l’attributo data-bs-upload-dragdropnon deve essere incluso così da evitare
inizializzazioni automatiche che possono portare a comportamenti inaspettati.
Per l’attivazione automatica del relativo JavaScript è importante
che il componente che contiene la struttura abbia l’attributo data-bs-upload-dragdrop.
In alternativa si può istanziare il componente utilizzando il costruttore come nel
seguente esempio.
Metodo statico che consente di ottenere l'istanza di avviso associata a un elemento DOM, è possibile utilizzarlo in questo modo: UploadDragDrop.getInstance(domElement).
getOrCreateInstance
Metodo statico che restituisce un'istanza di avviso associata a un elemento DOM o ne crea una nuova nel caso in cui non fosse stata inizializzata. Puoi utilizzarla in questo modo: UploadDragDrop.getOrCreateInstance(element).
dispose
Rimuove la funzionalità UploadDragDrop.
progress
fa avanzare la barra e la percentuale di completamento. Deve essere un numero compreso tra 0 e 1.0
start
fa comparire la barra e la percentuale di completamento
success
fa comparire lo stato di avvenuto completamento dell'operazione
reset
riporta la barra e la percentuale di completamento allo stato iniziale