UNPKG

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
"use strict"; 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