mirror of
https://github.com/Karaka-Management/oms-Media.git
synced 2026-01-11 00:48:41 +00:00
191 lines
3.9 KiB
JavaScript
Executable File
191 lines
3.9 KiB
JavaScript
Executable File
import { Logger } from '../../../jsOMS/Log/Logger.js';
|
|
import { HttpRequest } from '../../../jsOMS/Message/Request/Request.js';
|
|
import { RequestMethod } from '../../../jsOMS/Message/Request/RequestMethod.js';
|
|
import { RequestType } from '../../../jsOMS/Message/Request/RequestType.js';
|
|
|
|
/**
|
|
* Media uploader.
|
|
*
|
|
* @copyright Dennis Eichhorn
|
|
* @license OMS License 2.0
|
|
* @version 1.0.0
|
|
* @since 1.0.0
|
|
*/
|
|
export class Upload {
|
|
/**
|
|
* @constructor
|
|
*
|
|
* @param {Object} responseManager Response manager
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
constructor (responseManager)
|
|
{
|
|
this.responseManager = responseManager;
|
|
this.success = [];
|
|
|
|
this.uri = '';
|
|
this.allowedTypes = [];
|
|
this.maxFileSize = 0;
|
|
this.files = [];
|
|
};
|
|
|
|
/**
|
|
* Set max allowed file size.
|
|
*
|
|
* @param {int} size Max file size
|
|
*
|
|
* @return {void}
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
setMaxFileSize (size)
|
|
{
|
|
this.maxFileSize = size;
|
|
};
|
|
|
|
/**
|
|
* Get max allowed file size.
|
|
*
|
|
* @return {int} Max file size
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
getMaxFileSize ()
|
|
{
|
|
return this.maxFileSize;
|
|
};
|
|
|
|
/**
|
|
* Set success callback.
|
|
*
|
|
* @param {string} id Form id
|
|
* @param {function} callback Function callback on success
|
|
*
|
|
* @return {void}
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
setSuccess (id, callback)
|
|
{
|
|
this.success[id] = callback;
|
|
};
|
|
|
|
/**
|
|
* Set upload uri.
|
|
*
|
|
* @param {string} uri Upload destination
|
|
*
|
|
* @return {void}
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
setUri (uri)
|
|
{
|
|
this.uri = uri;
|
|
};
|
|
|
|
/**
|
|
* Set allowed upload file types.
|
|
*
|
|
* @param {Array} allowed Allowed upload file types
|
|
*
|
|
* @return {void}
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
setAllowedTypes (allowed)
|
|
{
|
|
this.allowedTypes = allowed;
|
|
};
|
|
|
|
/**
|
|
* Add allowed upload file type
|
|
*
|
|
* @param {string} allowed Allowed upload file type
|
|
*
|
|
* @return {void}
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
addAllowedType (allowed)
|
|
{
|
|
this.allowedTypes.push(allowed);
|
|
};
|
|
|
|
/**
|
|
* Add file to upload
|
|
*
|
|
* @param {string} file File to upload
|
|
*
|
|
* @return {void}
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
addFile (file)
|
|
{
|
|
this.files.push(file);
|
|
};
|
|
|
|
/**
|
|
* Get count of file to upload
|
|
*
|
|
* @return {int}
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
count ()
|
|
{
|
|
return this.files.length;
|
|
};
|
|
|
|
/**
|
|
* Upload data from form
|
|
*
|
|
* @param {string} formId Form id
|
|
*
|
|
* @return {void}
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
upload (formId)
|
|
{
|
|
/**
|
|
* @todo Karaka/oms-Media#5
|
|
* Validate file type and file size on the frontend before uploading
|
|
*/
|
|
const request = new HttpRequest();
|
|
const formData = new FormData();
|
|
const self = this;
|
|
|
|
this.files.forEach(function (element, index)
|
|
{
|
|
formData.append('file' + index, element);
|
|
});
|
|
|
|
request.setData(formData);
|
|
request.setType(RequestType.FORM_DATA);
|
|
request.setUri(this.uri);
|
|
request.setMethod(RequestMethod.PUT);
|
|
request.setSuccess(function (xhr)
|
|
{
|
|
try {
|
|
window.omsApp.logger.log(xhr.response);
|
|
const response = JSON.parse(xhr.response);
|
|
|
|
if (!self.success[formId]) {
|
|
self.responseManager.run(null, response);
|
|
} else {
|
|
self.success[formId](null, response);
|
|
}
|
|
} catch (e) {
|
|
window.omsApp.logger.log(e);
|
|
Logger.instance.error(e);
|
|
Logger.instance.error('Invalid media upload response: ' + xhr.response);
|
|
}
|
|
});
|
|
|
|
request.send();
|
|
};
|
|
};
|