Daniel Kvistgaard 04b91d9b34 Fix Cloudinary deletion of other files than images
Fixed by adding a resource_type on the file which is required for the
detroy method. It defaults to 'image', so if it isn't defined then it
will try to remove an image with the passed public_id.
2019-07-29 15:45:46 +02:00

73 lines
1.7 KiB
JavaScript

'use strict';
/**
* Module dependencies
*/
// Public node modules.
/* eslint-disable import/no-unresolved */
/* eslint-disable prefer-template */
const cloudinary = require('cloudinary').v2;
const intoStream = require('into-stream');
module.exports = {
provider: 'cloudinary',
name: 'Cloudinary',
auth: {
cloud_name: {
label: 'Cloud name',
type: 'text',
},
api_key: {
label: 'API Key',
type: 'text',
},
api_secret: {
label: 'API Secret',
type: 'password',
},
},
init: config => {
cloudinary.config({
cloud_name: config.cloud_name,
api_key: config.api_key,
api_secret: config.api_secret,
});
return {
upload(file) {
return new Promise((resolve, reject) => {
const upload_stream = cloudinary.uploader.upload_stream(
{ resource_type: 'auto' },
(err, image) => {
if (err) {
return reject(err);
}
file.public_id = image.public_id;
file.resource_type = image.resource_type;
file.url = image.secure_url;
resolve();
}
);
intoStream(file.buffer).pipe(upload_stream);
});
},
async delete(file) {
try {
const response = await cloudinary.uploader.destroy(file.public_id, {
invalidate: true,
resource_type: file.resource_type || 'image',
});
if (response.result !== 'ok') {
throw {
error: new Error(response.result),
};
}
} catch (error) {
throw error.error;
}
},
};
},
};