media-manager-next
Version:
Simple media manager to use it for uploading and managing resources (images, files, etc.). It uses MUI material design theme.
73 lines • 3.12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.deleteFileFromBucket = void 0;
const formidable_1 = __importDefault(require("formidable"));
const uuid_1 = require("uuid");
const fs_1 = __importDefault(require("fs"));
const storage_1 = require("@google-cloud/storage");
const image_size_1 = __importDefault(require("image-size"));
const production = process.env.APP_ENV === 'production';
const storageBucketUrl = process.env.STORAGE_BUCKET_URL;
const devFolder = process.env.PUBLIC_IMAGE_UPLOAD_FOLDER_DEV || 'dev/media';
const prodFolder = process.env.PUBLIC_IMAGE_UPLOAD_FOLDER_PROD || 'media';
const bucketStorage = process.env.PUBLIC_BUCKET_STORAGE || '';
const uploadFolder = production ? prodFolder : devFolder;
const deleteFileFromBucket = (id, url, { onMediaDelete }) => new Promise((resolve, reject) => {
const bucket = new storage_1.Storage().bucket(bucketStorage);
return bucket
.file(url.replace(`${storageBucketUrl}/`, ''))
.delete()
.then(() => onMediaDelete(id).then(resolve).catch(reject))
.catch(reject);
});
exports.deleteFileFromBucket = deleteFileFromBucket;
const uploadFileToBucket = (files, { onMediaUpload }) => new Promise((resolve, reject) => {
try {
if (!Array.isArray(files.file)) {
const { file: { newFilename, filepath, mimetype }, } = files;
let dimensions = { width: 0, height: 0 };
if (mimetype && mimetype.includes('image/')) {
dimensions = (0, image_size_1.default)(filepath);
}
const bucket = new storage_1.Storage().bucket(bucketStorage);
const fileName = `${uploadFolder}/${newFilename}`;
const file = bucket.file(fileName);
const data = fs_1.default.readFileSync(filepath);
return file.save(data, {
metadata: { contentType: mimetype },
public: true,
gzip: true,
}, async (err) => {
await fs_1.default.unlinkSync(filepath);
if (err) {
return reject(err);
}
else {
return onMediaUpload(mimetype, `${storageBucketUrl}/${fileName}`, dimensions).then(resolve).catch(reject);
}
});
}
else {
reject('INVALID_ARRAY');
}
}
catch (e) {
reject(e);
}
});
const post = (req, options) => new Promise((resolve, reject) => {
const form = (0, formidable_1.default)({
filename: (_name, _ext, part) => `${(0, uuid_1.v4)().replace(/^[a-zA-Z0-9-]+-/, '')}-${part.originalFilename}`,
});
return form.parse(req, (err, _fields, files) => {
if (err) {
return reject(err);
}
return uploadFileToBucket({ file: files.filepond }, options).then(resolve).catch(reject);
});
});
exports.default = post;
//# sourceMappingURL=googleCloudStorage.js.map