diff --git a/app/imports/api/files/UserImages.js b/app/imports/api/files/UserImages.js index ead7271b..fad4576b 100644 --- a/app/imports/api/files/UserImages.js +++ b/app/imports/api/files/UserImages.js @@ -9,9 +9,10 @@ const UserImages = createS3FilesCollection({ return 'Please upload with size equal or less than 10MB'; } // Allow common image extensions - if (/gif|png|jpe?g|webp/i.test(file.extension || '')) { + if (!/gif|png|jpe?g|webp/i.test(file.extension || '')) { return 'Please upload an image file only'; } + return true } }); diff --git a/app/imports/api/files/s3FileStorage.js b/app/imports/api/files/s3FileStorage.js index e26e6ac5..affdf9db 100644 --- a/app/imports/api/files/s3FileStorage.js +++ b/app/imports/api/files/s3FileStorage.js @@ -47,6 +47,7 @@ if (Meteor.isServer && Meteor.settings.useS3) { collectionName, storagePath, onBeforeUpload, + onAfterUpload, debug = Meteor.isProduction, allowClientCode = false, }){ @@ -54,7 +55,10 @@ if (Meteor.isServer && Meteor.settings.useS3) { collectionName, storagePath, onBeforeUpload, - onAfterUpload(fileRef){ + onAfterUpload(fileRef) { + // Call the provided afterUpload hook first + onAfterUpload(fileRef); + // Start moving files to AWS:S3 // after fully received by the Meteor server diff --git a/app/imports/server/imageProcessing/createThumbnail.js b/app/imports/server/imageProcessing/createThumbnail.js new file mode 100644 index 00000000..4837133d --- /dev/null +++ b/app/imports/server/imageProcessing/createThumbnail.js @@ -0,0 +1,8 @@ +import * as sharp from 'sharp'; + +export default async function createThumbnail(image) { + await sharp(image) + .resize(320, 240) + .png() + .toBuffer(); +} diff --git a/app/imports/server/publications/index.js b/app/imports/server/publications/index.js index 3bdc770a..ce8385af 100644 --- a/app/imports/server/publications/index.js +++ b/app/imports/server/publications/index.js @@ -11,3 +11,4 @@ import '/imports/server/publications/ownedDocuments.js'; import '/imports/server/publications/archivedCreatures.js'; import '/imports/server/publications/searchLibraryNodes.js'; import '/imports/server/publications/archiveFiles.js'; +import '/imports/server/publications/userImages.js'; diff --git a/app/imports/server/publications/userImages.js b/app/imports/server/publications/userImages.js new file mode 100644 index 00000000..765b607a --- /dev/null +++ b/app/imports/server/publications/userImages.js @@ -0,0 +1,7 @@ +import UserImages from '/imports/api/files/UserImages.js'; + +Meteor.publish('userImages', function () { + return UserImages.find({ + userId: this.userId, + }).cursor; +}); diff --git a/app/imports/ui/components/ImageUploadInput.vue b/app/imports/ui/components/ImageUploadInput.vue new file mode 100644 index 00000000..c93235b4 --- /dev/null +++ b/app/imports/ui/components/ImageUploadInput.vue @@ -0,0 +1,77 @@ + + + + + \ No newline at end of file diff --git a/app/imports/ui/files/UserImageCard.vue b/app/imports/ui/files/UserImageCard.vue new file mode 100644 index 00000000..e70141a6 --- /dev/null +++ b/app/imports/ui/files/UserImageCard.vue @@ -0,0 +1,56 @@ + + + diff --git a/app/imports/ui/pages/Files.vue b/app/imports/ui/pages/Files.vue index 8d77f097..050b6064 100644 --- a/app/imports/ui/pages/Files.vue +++ b/app/imports/ui/pages/Files.vue @@ -7,65 +7,103 @@ + + Archived Characters + + + + + + mdi-file-upload-outline + + + + + + + + + Images + + + + +