<template> <DocSectionText v-bind="$attrs"> <p>Uploading implementation can be overridden by enabling <i>customUpload</i> property. This sample, displays the image on the client side with a grayscale filter.</p> </DocSectionText> <div class="card flex flex-col items-center gap-6"> <FileUpload mode="basic" @select="onFileSelect" customUpload auto severity="secondary" class="p-button-outlined" /> <img v-if="src" :src="src" alt="Image" class="shadow-md rounded-xl w-full sm:w-64" style="filter: grayscale(100%)" /> </div> <DocSectionCode :code="code" /> </template> <script> export default { data() { return { src: null, code: { basic: ` <FileUpload mode="basic" @select="onFileSelect" customUpload auto severity="secondary" class="p-button-outlined" /> <img v-if="src" :src="src" alt="Image" class="shadow-md rounded-xl w-full sm:w-64" style="filter: grayscale(100%)" /> `, options: ` <template> <div class="card flex flex-col items-center gap-6"> <FileUpload mode="basic" @select="onFileSelect" customUpload auto severity="secondary" class="p-button-outlined" /> <img v-if="src" :src="src" alt="Image" class="shadow-md rounded-xl w-full sm:w-64" style="filter: grayscale(100%)" /> </div> </template> <script> export default { data() { return { src: null } }, methods: { onFileSelect(event) { const file = event.files[0]; const reader = new FileReader(); reader.onload = async (e) => { this.src = e.target.result; }; reader.readAsDataURL(file); } } }; <\/script> `, composition: ` <template> <div class="card flex flex-col items-center gap-6"> <FileUpload mode="basic" @select="onFileSelect" customUpload auto severity="secondary" class="p-button-outlined" /> <img v-if="src" :src="src" alt="Image" class="shadow-md rounded-xl w-full sm:w-64" style="filter: grayscale(100%)" /> </div> </template> <script setup> import { ref } from "vue"; const src = ref(null); function onFileSelect(event) { const file = event.files[0]; const reader = new FileReader(); reader.onload = async (e) => { src.value = e.target.result; }; reader.readAsDataURL(file); } <\/script> ` } }; }, methods: { onFileSelect(event) { const file = event.files[0]; const reader = new FileReader(); reader.onload = async (e) => { this.src = e.target.result; }; reader.readAsDataURL(file); } } }; </script>