diff --git a/.meteor/packages b/.meteor/packages index e6039d463..5b1170eab 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -81,7 +81,7 @@ konecty:mongo-counter percolate:synced-cron cfs:filesystem ostrio:cookies -ostrio:files@2.0.1 +ostrio:files@2.3.0 rajit:bootstrap3-datepicker-fi rajit:bootstrap3-datepicker-ar rajit:bootstrap3-datepicker-bg diff --git a/models/attachments.js b/models/attachments.js index 3816a407a..4478a25c8 100644 --- a/models/attachments.js +++ b/models/attachments.js @@ -59,7 +59,12 @@ Attachments = new FilesCollection({ delete opts.meta.fileId; } else if (opts?.file?.name) { // Server - filenameWithoutExtension = opts.file.name.replace(new RegExp(opts.file.extensionWithDot + "$"), "") + if (opts.file.extension) { + filenameWithoutExtension = opts.file.name.replace(new RegExp(opts.file.extensionWithDot + "$"), "") + } else { + // file has no extension, so don't replace anything, otherwise the last character is removed (because extensionWithDot = '.') + filenameWithoutExtension = opts.file.name; + } fileId = opts.fileId; } else { @@ -71,6 +76,10 @@ Attachments = new FilesCollection({ // remove fileId from meta, it was only stored there to have this information here in the namingFunction function return ret; }, + sanitize(str, max, replacement) { + // keep the original filename + return str; + }, storagePath() { const ret = fileStoreStrategyFactory.storagePath; return ret; @@ -136,9 +145,6 @@ if (Meteor.isServer) { const fileObj = Attachments.findOne({_id: fileObjId}); moveToStorage(fileObj, storageDestination, fileStoreStrategyFactory); - - // since Meteor-Files 2.1.0 the filename is truncated to 28 characters, so rename the file after upload to the right filename back - rename(fileObj, fileObj.name, fileStoreStrategyFactory); }, renameAttachment(fileObjId, newName) { check(fileObjId, String); diff --git a/models/avatars.js b/models/avatars.js index bc95bc1b6..4fe19ddd4 100644 --- a/models/avatars.js +++ b/models/avatars.js @@ -45,6 +45,37 @@ Avatars = new FilesCollection({ debug: false, // Change to `true` for debugging collectionName: 'avatars', allowClientCode: true, + namingFunction(opts) { + let filenameWithoutExtension = "" + let fileId = ""; + if (opts?.name) { + // Client + filenameWithoutExtension = opts.name.replace(/(.+)\..+/, "$1"); + fileId = opts.meta.fileId; + delete opts.meta.fileId; + } else if (opts?.file?.name) { + // Server + if (opts.file.extension) { + filenameWithoutExtension = opts.file.name.replace(new RegExp(opts.file.extensionWithDot + "$"), "") + } else { + // file has no extension, so don't replace anything, otherwise the last character is removed (because extensionWithDot = '.') + filenameWithoutExtension = opts.file.name; + } + fileId = opts.fileId; + } + else { + // should never reach here + filenameWithoutExtension = Math.random().toString(36).slice(2); + fileId = Math.random().toString(36).slice(2); + } + const ret = fileId + "-original-" + filenameWithoutExtension; + // remove fileId from meta, it was only stored there to have this information here in the namingFunction function + return ret; + }, + sanitize(str, max, replacement) { + // keep the original filename + return str; + }, storagePath() { const ret = fileStoreStrategyFactory.storagePath; return ret;