FormInputFile

Pemilih file custom dengan drag-and-drop, validasi, multiple, daftar file, dan preview gambar lokal.

Dasar

Komponen menghasilkan objek File melalui v-model. Pemilihan file dan validasi terjadi di komponen; aplikasi tetap mengunggahnya ke server melalui API atau FormData.

Wajib diisi

Unggah PDF atau gambar dengan ukuran maksimal 5 MB.

Belum ada file terpilih.

Multiple dan preview

Mode multiple menambahkan file baru ke array yang sudah ada. Gunakan max-files, max-size, dan accept untuk validasi awal sebelum upload. Gambar menerima preview lokal; dokumen menampilkan ikon, nama, dan ukuran.

Pilih sampai empat foto. File baru belum diunggah ke server.

0 dari 4 foto dipilih.

Tombol ringkas

Variant button cocok untuk toolbar atau proses impor. Daftar file tetap ditampilkan dan dapat disembunyikan melalui show-list="false".

CSV atau XLSX, maksimal 5 MB.

Error dan disabled

Error aplikasi berasal dari FormField. File yang melanggar tipe, ukuran, duplikat, atau jumlah maksimum juga menampilkan pesan lokal dan dikirim melalui event reject.

Wajib diisi

Bukti pembayaran wajib diunggah.

File tidak dapat diganti selama proses verifikasi.

Mengunggah ke server

Komponen tidak memulai request jaringan. Masukkan nilai model ke FormData ketika form disimpan. Server tetap harus memeriksa tipe, ukuran, isi file, izin, dan nama penyimpanan karena validasi browser hanya membantu pengguna sebelum upload.

ts
const body = new FormData()\nfor (const file of files.value) body.append('files[]', file)\nawait $fetch('/api/documents', { method: 'POST', body })

API

Props

PropTipeDefaultKeterangan
idstring—ID saat dipakai sendiri. Di dalam FormField, setel ID-nya di FormField.
v-modelFile | File[] | nullnullFile terpilih. Multiple menghasilkan File[], sedangkan mode tunggal menghasilkan File.
variant'dropzone' | 'button''dropzone'Area drag-and-drop atau tombol upload ringkas.
size'sm' | 'md' | 'lg''md'Ukuran area, teks, preview, dan tombol.
multiplebooleanfalseMengizinkan lebih dari satu file dan menambahkan pilihan baru.
acceptstringsemua tipeDaftar MIME, wildcard, atau ekstensi native seperti image/*,.pdf.
maxSizenumber5 * 1024 * 1024Ukuran maksimum setiap file dalam byte; 0 meniadakan batas.
maxFilesnumber0Jumlah maksimum pada multiple; 0 meniadakan batas.
previewbooleantrueMembuat object URL lokal untuk preview file gambar.
showListbooleantrueMenampilkan daftar file, ukuran, preview, dan tombol hapus.
allowDuplicatesbooleanfalseMengizinkan metadata file yang sama dipilih lebih dari sekali.
captureboolean | 'user' | 'environment'undefinedMeneruskan petunjuk sumber kamera ke input file pada perangkat.
disabledbooleanfalseMenonaktifkan pemilihan, drop, dan penghapusan file.
requiredbooleanfalseMenandai trigger wajib diisi; diwarisi dari FormField.
invalidbooleanfalseStatus error untuk pemakaian mandiri.
browseLabelstring'Pilih file'Label tombol pada variant button.
dropLabelstring'Klik untuk memilih atau tarik file ke sini'Teks utama dropzone.
hintstringdibuat dari accept dan batasKeterangan ringkas di dalam dropzone.

Slots

SlotTipeDefaultKeterangan
trigger{ browse, dragging, disabled }—Mengganti dropzone atau tombol pemilih file.
file{ file, index, previewUrl, remove }—Mengganti tampilan setiap file terpilih.

Events

EventTipeDefaultKeterangan
update:modelValue(File | File[] | null) => void—Dipicu untuk sinkronisasi v-model.
change(File | File[] | null) => void—Dipicu ketika daftar file yang valid berubah.
reject(W4cFormInputFileRejection[]) => void—Mengirim file yang ditolak beserta alasan type, size, count, atau duplicate.
remove(file: File, index: number) => void—Dipicu setelah satu file dihapus.

Atribut name dan listener native diteruskan ke input file. Class/style diterapkan pada wrapper. Ref komponen menyediakan browse(), clear(), dan focus().