| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // file uploader virtual class
- // 各アップローダーで共通のメソッドはここで定義する
- class Uploader {
- constructor(crowi) {
- this.crowi = crowi;
- this.configManager = crowi.configManager;
- }
- getIsUploadable() {
- return !this.configManager.getConfig('crowi', 'app:fileUploadDisabled') && this.isValidUploadSettings();
- }
- // File reading is possible even if uploading is disabled
- getIsReadable() {
- return this.isValidUploadSettings();
- }
- isValidUploadSettings() {
- throw new Error('Implement this');
- }
- getFileUploadEnabled() {
- if (!this.getIsUploadable()) {
- return false;
- }
- return !!this.configManager.getConfig('crowi', 'app:fileUpload');
- }
- /**
- * Check files size limits for all uploaders
- *
- * @param {*} uploadFileSize
- * @param {*} maxFileSize
- * @param {*} totalLimit
- * @returns
- * @memberof Uploader
- */
- async doCheckLimit(uploadFileSize, maxFileSize, totalLimit) {
- if (uploadFileSize > maxFileSize) {
- return { isUploadable: false, errorMessage: 'File size exceeds the size limit per file' };
- }
- const Attachment = this.crowi.model('Attachment');
- // Get attachment total file size
- const res = await Attachment.aggregate().group({
- _id: null,
- total: { $sum: '$fileSize' },
- });
- // Return res is [] if not using
- const usingFilesSize = res.length === 0 ? 0 : res[0].total;
- if (usingFilesSize + uploadFileSize > totalLimit) {
- return { isUploadable: false, errorMessage: 'Uploading files reaches limit' };
- }
- return { isUploadable: true };
- }
- /**
- * Checks if Uploader can respond to the HTTP request.
- */
- canRespond() {
- return false;
- }
- /**
- * Respond to the HTTP request.
- * @param {Response} res
- * @param {Response} attachment
- */
- respond(res, attachment) {
- throw new Error('Implement this');
- }
- }
- module.exports = Uploader;
|