2022-02-22 11:47:44 +01:00

67 lines
1.6 KiB
JavaScript

'use strict';
/**
* Module dependencies
*/
// Public node modules.
const fs = require('fs');
const path = require('path');
const fse = require('fs-extra');
const { PayloadTooLargeError } = require('@strapi/utils').errors;
const UPLOADS_FOLDER_NAME = 'uploads';
module.exports = {
init({ sizeLimit = 1000000 } = {}) {
const verifySize = file => {
if (file.size > sizeLimit) {
throw new PayloadTooLargeError();
}
};
const publicDir = strapi.config.get('server.public.path');
// Ensure uploads folder exists
const uploadPath = path.resolve(publicDir, UPLOADS_FOLDER_NAME);
fse.ensureDirSync(uploadPath);
return {
upload(file) {
verifySize(file);
return new Promise((resolve, reject) => {
// write file in public/assets folder
fs.writeFile(path.join(uploadPath, `${file.hash}${file.ext}`), file.buffer, err => {
if (err) {
return reject(err);
}
file.url = `/${UPLOADS_FOLDER_NAME}/${file.hash}${file.ext}`;
resolve();
});
});
},
delete(file) {
return new Promise((resolve, reject) => {
const filePath = path.join(publicDir, `/uploads/${file.hash}${file.ext}`);
if (!fs.existsSync(filePath)) {
return resolve("File doesn't exist");
}
// remove file from public/assets folder
fs.unlink(filePath, err => {
if (err) {
return reject(err);
}
resolve();
});
});
},
};
},
};