2
0

attachment.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. module.exports = function(crowi) {
  2. var debug = require('debug')('crowi:models:attachment')
  3. , mongoose = require('mongoose')
  4. , ObjectId = mongoose.Schema.Types.ObjectId
  5. , Promise = require('bluebird')
  6. , fileUploader = require('../util/fileUploader')(crowi)
  7. ;
  8. function generateFileHash (fileName) {
  9. var hasher = require('crypto').createHash('md5');
  10. hasher.update(fileName);
  11. return hasher.digest('hex');
  12. }
  13. attachmentSchema = new mongoose.Schema({
  14. page: { type: ObjectId, ref: 'Page', index: true },
  15. creator: { type: ObjectId, ref: 'User', index: true },
  16. filePath: { type: String, required: true },
  17. fileName: { type: String, required: true },
  18. originalName: { type: String },
  19. fileFormat: { type: String, required: true },
  20. fileSize: { type: Number, default: 0 },
  21. createdAt: { type: Date, default: Date.now }
  22. }, {
  23. toJSON: {
  24. virtuals: true
  25. }
  26. });
  27. attachmentSchema.virtual('fileUrl').get(function() {
  28. return fileUploader.generateUrl(this.filePath);
  29. });
  30. attachmentSchema.statics.getListByPageId = function(id) {
  31. var self = this;
  32. return new Promise(function(resolve, reject) {
  33. self
  34. .find({page: id})
  35. .sort({'updatedAt': 1})
  36. .populate('creator')
  37. .exec(function(err, data) {
  38. if (err) {
  39. return reject(err);
  40. }
  41. if (data.length < 1) {
  42. return resolve([]);
  43. }
  44. debug(data);
  45. return resolve(data);
  46. });
  47. });
  48. };
  49. attachmentSchema.statics.create = function(pageId, creator, filePath, originalName, fileName, fileFormat, fileSize) {
  50. var Attachment = this;
  51. return new Promise(function(resolve, reject) {
  52. var newAttachment = new Attachment();
  53. newAttachment.page = pageId;
  54. newAttachment.creator = creator._id;
  55. newAttachment.filePath = filePath;
  56. newAttachment.originalName = originalName;
  57. newAttachment.fileName = fileName;
  58. newAttachment.fileFormat = fileFormat;
  59. newAttachment.fileSize = fileSize;
  60. newAttachment.createdAt = Date.now();
  61. newAttachment.save(function(err, data) {
  62. if (err) {
  63. debug('Error on saving attachment.', err);
  64. return reject(err);
  65. }
  66. debug('Attachment saved.', data);
  67. return resolve(data);
  68. });
  69. });
  70. };
  71. attachmentSchema.statics.createAttachmentFilePath = function (pageId, fileName, fileType) {
  72. var ext = '.' + fileName.match(/(.*)(?:\.([^.]+$))/)[2];
  73. return 'attachment/' + pageId + '/' + generateFileHash(fileName) + ext;
  74. };
  75. return mongoose.model('Attachment', attachmentSchema);
  76. };