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 @@
+
+
+
+
+ {{ model.name }}
+
+
+ {{ model.size }}
+
+
+
+
+
+ mdi-delete
+
+
+ mdi-download
+
+
+
+
+
+
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
+
-
- Archived Characters
-
+
+
+
+
+
+ mdi-file-upload-outline
+
+
+ {{ archiveFileError }}
+
+
+ Upload archive
+
+
+
+
+
+
+ Images
+
+
-
-
-
- mdi-file-upload-outline
-
-
- {{ archiveFileError }}
-
-
- Upload archive
-
-
+
+
+
+