UNPKG

ckeditor5-google-do

Version:

Google Cloud and DigitalOcean Spaces upload plugin for ckeditor5

71 lines (64 loc) 1.71 kB
import axios from 'axios'; const CancelToken = axios.CancelToken; const source = CancelToken.source(); export default class Adapter { constructor(loader, url, serveUrl) { this.loader = loader; this.url = url; this.serveUrl = serveUrl; } upload() { return this.getCredentials().then(this.uploadImage.bind(this)); } abort() { source.cancel('Operation canceled by the user.'); } getCredentials() { return new Promise(async (resolve, reject) => { let filename = this.loader.file.name; let filetype = this.loader.file.type; try { let res = await axios.get( `${this.url}?filename=${filename}&filetype=${filetype}`, { cancelToken: source.token } ); resolve(res.data); } catch (err) { reject(err); } }); } uploadImage(s3creds) { return new Promise(async (resolve, reject) => { try { await axios.put(s3creds.endpoint_url, this.loader.file, { headers: { 'Content-Type': this.loader.file.type, 'x-amz-acl': s3creds.acl }, cancelToken: source.token }); if (!this.serveUrl) { resolve({ default: s3creds.location }); } else { this.getServingUrl(resolve, reject); } } catch (err) { return reject(err); } }); } async getServingUrl(resolve, reject) { let filename = this.loader.file.name; try { let res = await axios.get(`${this.serveUrl}?filename=${filename}`, { cancelToken: source.token }); resolve({ default: res.data.serveUrl }); } catch (err) { reject(err); } } }