Skip to content

Vue 3 Composition Adapter (@jengo/storage/vue) ​

vue
<script setup lang="ts">
import { ref } from 'vue';
import { useChunkedUpload } from '@jengo/storage/vue';

const selectedFile = ref<File | null>(null);

const {
    status,
    progress,
    result,
    error,
    isUploading,
    isPaused,
    start,
    pause,
    resume,
    abort,
} = useChunkedUpload({
    disk: 'public',
    folder: 'documents',
});

function onFileSelect(e: Event) {
    const input = e.target as HTMLInputElement;
    selectedFile.value = input.files?.[0] || null;
}
</script>

<template>
    <div>
        <input type="file" @change="onFileSelect" />
        <button :disabled="!selectedFile || isUploading" @click="selectedFile && start(selectedFile)">
            Start Upload
        </button>
        <button v-if="isUploading" @click="pause">Pause</button>
        <button v-if="isPaused" @click="resume">Resume</button>
        <button v-if="isUploading || isPaused" @click="abort">Abort</button>

        <div v-if="isUploading || isPaused">
            <progress :value="progress.percent" max="100"></progress>
            <p>{{ progress.percent }}% - {{ progress.speed }} - ETA: {{ progress.remainingSeconds }}s</p>
        </div>

        <p v-if="result">Uploaded: <a :href="result.url">{{ result.filename }}</a></p>
    </div>
</template>

Released under the MIT License.