avatars.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { Meteor } from 'meteor/meteor';
  2. import { FilesCollection } from 'meteor/ostrio:files';
  3. import path from 'path';
  4. import { createBucket } from './lib/grid/createBucket';
  5. import { createOnAfterUpload } from './lib/fsHooks/createOnAfterUpload';
  6. import { createInterceptDownload } from './lib/fsHooks/createInterceptDownload';
  7. import { createOnAfterRemove } from './lib/fsHooks/createOnAfterRemove';
  8. let avatarsBucket;
  9. if (Meteor.isServer) {
  10. avatarsBucket = createBucket('avatars');
  11. }
  12. Avatars = new FilesCollection({
  13. debug: false, // Change to `true` for debugging
  14. collectionName: 'avatars',
  15. allowClientCode: true,
  16. storagePath() {
  17. if (process.env.WRITABLE_PATH) {
  18. return path.join(process.env.WRITABLE_PATH, 'uploads', 'avatars');
  19. }
  20. return path.normalize(`assets/app/uploads/${this.collectionName}`);;
  21. },
  22. onBeforeUpload(file) {
  23. if (file.size <= 72000 && file.type.startsWith('image/')) {
  24. return true;
  25. }
  26. return 'avatar-too-big';
  27. },
  28. onAfterUpload: createOnAfterUpload(avatarsBucket),
  29. interceptDownload: createInterceptDownload(avatarsBucket),
  30. onAfterRemove: createOnAfterRemove(avatarsBucket),
  31. });
  32. function isOwner(userId, doc) {
  33. return userId && userId === doc.userId;
  34. }
  35. if (Meteor.isServer) {
  36. Avatars.allow({
  37. insert: isOwner,
  38. update: isOwner,
  39. remove: isOwner,
  40. fetch: ['userId'],
  41. });
  42. }
  43. export default Avatars;