mirror of
https://github.com/Karaka-Management/oms-Media.git
synced 2026-02-12 23:38:42 +00:00
Fix file upload
This commit is contained in:
parent
d93224fc31
commit
822cd3ebbe
|
|
@ -29,25 +29,32 @@
|
||||||
|
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
if (!form.querySelector('input[type=file]')|| !document.querySelector('input[type=file][form=' + form.id + ']')) {
|
if (!form.querySelector('input[type=file]') || !document.querySelector('input[type=file][form=' + form.id + ']')) {
|
||||||
try {
|
try {
|
||||||
// Inject media upload into form view
|
// Inject media upload into form view
|
||||||
this.app.uiManager.getFormManager().get(form.id).injectSubmit(function (e, requestId, requestGroup)
|
this.app.uiManager.getFormManager().get(form.id).injectSubmit(function (e, requestId)
|
||||||
{
|
{
|
||||||
/** global: jsOMS */
|
/** global: jsOMS */
|
||||||
let fileFields = e.querySelectorAll('input[type=file]'),
|
let fileFields = document.querySelectorAll(
|
||||||
|
'#' + e.id + ' input[type=file], '
|
||||||
|
+ 'input[form=' + e.id + '][type=file]'
|
||||||
|
),
|
||||||
uploader = new jsOMS.Modules.Models.Media.Upload(self.app.responseManager);
|
uploader = new jsOMS.Modules.Models.Media.Upload(self.app.responseManager);
|
||||||
|
|
||||||
uploader.setSuccess(e.id, function (type, response)
|
uploader.setSuccess(e.id, function (type, response)
|
||||||
{
|
{
|
||||||
e.querySelector('input[type=file]+input[type=hidden]').value = JSON.stringify(response.uploads);
|
document.querySelector('input[form=' + e.id + '][type=file]+input[form=' + e.id + '][type=hidden]').value = JSON.stringify(response);
|
||||||
self.app.eventManager.trigger(requestGroup, requestId);
|
self.app.eventManager.trigger(form.id, requestId);
|
||||||
});
|
});
|
||||||
|
|
||||||
uploader.setUri('{/base}/{/lang}/api/media');
|
uploader.setUri('{/base}/{/lang}/api/media');
|
||||||
|
|
||||||
for (let i = 0; i < fileFields.length; i++) {
|
const length = fileFields.length;
|
||||||
for (let j = 0; j < fileFields[i].files.length; j++) {
|
let fileLength = 0;
|
||||||
|
|
||||||
|
for (let i = 0; i < length; i++) {
|
||||||
|
fileLength = fileFields[i].files.length;
|
||||||
|
for (let j = 0; j < fileLength; j++) {
|
||||||
uploader.addFile(fileFields[i].files[j]);
|
uploader.addFile(fileFields[i].files[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ class ApiController extends Controller
|
||||||
$uploads = $this->uploadFiles(
|
$uploads = $this->uploadFiles(
|
||||||
$request->getFiles(),
|
$request->getFiles(),
|
||||||
$request->getHeader()->getAccount(),
|
$request->getHeader()->getAccount(),
|
||||||
(string) ($request->getData('path') ?? __DIR__ . '/../../Modules/Media/Files')
|
(string) ($request->getData('path') ?? __DIR__ . '/../../../Modules/Media/Files')
|
||||||
);
|
);
|
||||||
|
|
||||||
$ids = [];
|
$ids = [];
|
||||||
|
|
@ -70,7 +70,7 @@ class ApiController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
$response->getHeader()->set('Content-Type', MimeType::M_JSON . '; charset=utf-8', true);
|
$response->getHeader()->set('Content-Type', MimeType::M_JSON . '; charset=utf-8', true);
|
||||||
$response->set($request->getUri()->__toString(), [['uploads' => $ids, 'type' => 'UI']]);
|
$response->set($request->getUri()->__toString(), $ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -117,7 +117,7 @@ class ApiController extends Controller
|
||||||
|
|
||||||
public static function createMediaPath(string $basePath = 'Modules/Media/Files') : string
|
public static function createMediaPath(string $basePath = 'Modules/Media/Files') : string
|
||||||
{
|
{
|
||||||
$rndPath = str_pad(dechex(rand(0, 65535)), 4, '0', STR_PAD_LEFT);
|
$rndPath = \str_pad(\dechex(\mt_rand(0, 65535)), 4, '0', STR_PAD_LEFT);
|
||||||
return $basePath . '/' . $rndPath[0] . $rndPath[1] . '/' . $rndPath[2] . $rndPath[3];
|
return $basePath . '/' . $rndPath[0] . $rndPath[1] . '/' . $rndPath[2] . $rndPath[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,9 +66,9 @@
|
||||||
{
|
{
|
||||||
// TODO: validate file type + file size
|
// TODO: validate file type + file size
|
||||||
|
|
||||||
let request = new jsOMS.Message.Request.Request(),
|
const request = new jsOMS.Message.Request.Request(),
|
||||||
formData = new FormData(),
|
formData = new FormData(),
|
||||||
self = this;
|
self = this;
|
||||||
|
|
||||||
this.files.forEach(function (element, index)
|
this.files.forEach(function (element, index)
|
||||||
{
|
{
|
||||||
|
|
@ -76,23 +76,22 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
request.setData(formData);
|
request.setData(formData);
|
||||||
request.setType(jsOMS.Message.Request.RequestType.RAW);
|
request.setType(jsOMS.Message.Request.RequestType.FILE);
|
||||||
request.setUri(this.uri);
|
request.setUri(this.uri);
|
||||||
request.setMethod(jsOMS.Message.Request.RequestMethod.POST);
|
request.setMethod(jsOMS.Message.Request.RequestMethod.POST);
|
||||||
request.setRequestHeader('HTTP_X_REQUESTED_WITH', 'XMLHttpRequest');
|
request.setRequestHeader('HTTP_X_REQUESTED_WITH', 'XMLHttpRequest');
|
||||||
request.setSuccess(function (xhr)
|
request.setSuccess(function (xhr)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
let response = JSON.parse(xhr.response);
|
const response = JSON.parse(xhr.response);
|
||||||
|
|
||||||
for (let k = 0; k < response.length; ++k) {
|
if (!self.success[formId]) {
|
||||||
if (!self.success[formId]) {
|
self.responseManager.run(null, response);
|
||||||
self.responseManager.run(response[k].type, response[k]);
|
} else {
|
||||||
} else {
|
self.success[formId](null, response);
|
||||||
self.success[formId](response[k].type, response[k]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
jsOMS.Log.Logger.instance.error(e);
|
jsOMS.Log.Logger.instance.error(e);
|
||||||
jsOMS.Log.Logger.instance.error('Invalid media upload response: ' + xhr.response);
|
jsOMS.Log.Logger.instance.error('Invalid media upload response: ' + xhr.response);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -156,7 +156,7 @@ class UploadFile
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!\is_dir($path)) {
|
if (!\is_dir($path)) {
|
||||||
Directory::create($path, 0655, true);
|
Directory::create($path, 0755, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!\is_uploaded_file($f['tmp_name'])) {
|
if (!\is_uploaded_file($f['tmp_name'])) {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<header><h1><?= $this->getHtml('Media') ?></h1></header>
|
<header><h1><?= $this->getHtml('Media') ?></h1></header>
|
||||||
|
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<form>
|
<form id="<?= $this->form; ?>-upload">
|
||||||
<table class="layout wf-100">
|
<table class="layout wf-100">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr><td><label for="iMedia"><?= $this->getHtml('Media') ?></label>
|
<tr><td><label for="iMedia"><?= $this->getHtml('Media') ?></label>
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
<tr><td><label for="iUpload"><?= $this->getHtml('Upload', 'Media') ?></label>
|
<tr><td><label for="iUpload"><?= $this->getHtml('Upload', 'Media') ?></label>
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<input type="file" id="iUpload" name="upload" form="<?= $this->form; ?>" multiple>
|
<input type="file" id="iUpload" name="upload" form="<?= $this->form; ?>" multiple>
|
||||||
<input form="<?= $this->form; ?>" type="hidden" name="type"><td>
|
<input form="<?= $this->form; ?>" type="hidden" name="media-list"><td>
|
||||||
</table>
|
</table>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user