From f805a9e076618388b6673292a1eac4b69930bf49 Mon Sep 17 00:00:00 2001 From: yavuz yildirim Date: Sat, 16 Nov 2024 20:35:47 +0300 Subject: [PATCH] feat: Add file upload and deletion functionality This commit adds the ability to upload and delete files in the useDirectusFiles composable. The new functions, uploadFiles and deleteFiles, allow users to upload single or multiple files and delete files by their ID. This enhances the functionality of the composable and provides more flexibility for managing files. --- src/runtime/composables/useDirectusFiles.ts | 64 ++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/src/runtime/composables/useDirectusFiles.ts b/src/runtime/composables/useDirectusFiles.ts index 3a9ec4b4..325997f5 100644 --- a/src/runtime/composables/useDirectusFiles.ts +++ b/src/runtime/composables/useDirectusFiles.ts @@ -50,5 +50,67 @@ export const useDirectusFiles = () => { return url.href } - return { getFiles, getThumbnail } + const uploadFiles = async (fileData, options = {}) => { + try { + const formData = new FormData(); + + if (Array.isArray(fileData)) { + fileData.forEach((file) => { + formData.append('file[]', file); + }); + } else { + formData.append('file', fileData); + } + + const uploadResponse = await directus("/files", { + method: "POST", + body: formData + }); + + const fileId = uploadResponse.data.id; + + if (options.title || options.tags) { + const updateData = {}; + if (options.title) updateData.title = options.title; + if (options.tags) updateData.tags = options.tags; + + await directus(`/files/${fileId}`, { + method: "PATCH", + body: updateData + }); + + const updatedFile = await directus(`/files/${fileId}`, { + method: "GET" + }); + + return updatedFile.data; + } + + return uploadResponse.data; + + } catch (error) { + console.error('File upload error:', error); + throw error; + } + }; + + const deleteFiles = async (fileId) => { + try { + if (Array.isArray(fileId)) { + await directus("/files", { + method: "DELETE", + body: fileId + }); + } else { + await directus(`/files/${fileId}`, { + method: "DELETE" + }); + } + } catch (error) { + console.error('File upload error:', error); + throw error; + } + }; + + return { getFiles, getThumbnail, uploadFiles, deleteFiles } }