avatars.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { Meteor } from 'meteor/meteor';
  2. import { FilesCollection } from 'meteor/ostrio:files';
  3. import { createBucket } from './lib/grid/createBucket';
  4. import fs from 'fs';
  5. import path from 'path';
  6. import FileStoreStrategyFactory, { FileStoreStrategyFilesystem, FileStoreStrategyGridFs} from '/models/lib/fileStoreStrategy';
  7. let avatarsBucket;
  8. if (Meteor.isServer) {
  9. avatarsBucket = createBucket('avatars');
  10. }
  11. const fileStoreStrategyFactory = new FileStoreStrategyFactory(FileStoreStrategyFilesystem, FileStoreStrategyGridFs, avatarsBucket);
  12. Avatars = new FilesCollection({
  13. debug: false, // Change to `true` for debugging
  14. collectionName: 'avatars',
  15. allowClientCode: true,
  16. storagePath() {
  17. const ret = path.join(process.env.WRITABLE_PATH, 'avatars');
  18. return ret;
  19. },
  20. onBeforeUpload(file) {
  21. if (file.size <= 72000 && file.type.startsWith('image/')) {
  22. return true;
  23. }
  24. return 'avatar-too-big';
  25. },
  26. onAfterUpload(fileObj) {
  27. Object.keys(fileObj.versions).forEach(versionName => {
  28. fileStoreStrategyFactory.getFileStrategy(this, fileObj, versionName).onAfterUpload();
  29. });
  30. },
  31. interceptDownload(http, fileObj, versionName) {
  32. const ret = fileStoreStrategyFactory.getFileStrategy(this, fileObj, versionName).interceptDownload(http);
  33. return ret;
  34. },
  35. onAfterRemove(files) {
  36. files.forEach(fileObj => {
  37. Object.keys(fileObj.versions).forEach(versionName => {
  38. fileStoreStrategyFactory.getFileStrategy(this, fileObj, versionName).onAfterRemove();
  39. });
  40. });
  41. },
  42. });
  43. function isOwner(userId, doc) {
  44. return userId && userId === doc.userId;
  45. }
  46. if (Meteor.isServer) {
  47. Avatars.allow({
  48. insert: isOwner,
  49. update: isOwner,
  50. remove: isOwner,
  51. fetch: ['userId'],
  52. });
  53. Meteor.startup(() => {
  54. const storagePath = Avatars.storagePath();
  55. if (!fs.existsSync(storagePath)) {
  56. console.log("create storagePath because it doesn't exist: " + storagePath);
  57. fs.mkdirSync(storagePath, { recursive: true });
  58. }
  59. });
  60. }
  61. export default Avatars;