Fix file upload

This commit is contained in:
Dennis Eichhorn 2018-11-03 15:17:24 +01:00
parent d93224fc31
commit 822cd3ebbe
5 changed files with 30 additions and 24 deletions

View File

@ -29,25 +29,32 @@
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 {
// 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 */
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.setSuccess(e.id, function (type, response)
{
e.querySelector('input[type=file]+input[type=hidden]').value = JSON.stringify(response.uploads);
self.app.eventManager.trigger(requestGroup, requestId);
document.querySelector('input[form=' + e.id + '][type=file]+input[form=' + e.id + '][type=hidden]').value = JSON.stringify(response);
self.app.eventManager.trigger(form.id, requestId);
});
uploader.setUri('{/base}/{/lang}/api/media');
for (let i = 0; i < fileFields.length; i++) {
for (let j = 0; j < fileFields[i].files.length; j++) {
const length = fileFields.length;
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]);
}
}

View File

@ -61,7 +61,7 @@ class ApiController extends Controller
$uploads = $this->uploadFiles(
$request->getFiles(),
$request->getHeader()->getAccount(),
(string) ($request->getData('path') ?? __DIR__ . '/../../Modules/Media/Files')
(string) ($request->getData('path') ?? __DIR__ . '/../../../Modules/Media/Files')
);
$ids = [];
@ -70,7 +70,7 @@ class ApiController extends Controller
}
$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
{
$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];
}

View File

@ -66,9 +66,9 @@
{
// TODO: validate file type + file size
let request = new jsOMS.Message.Request.Request(),
formData = new FormData(),
self = this;
const request = new jsOMS.Message.Request.Request(),
formData = new FormData(),
self = this;
this.files.forEach(function (element, index)
{
@ -76,23 +76,22 @@
});
request.setData(formData);
request.setType(jsOMS.Message.Request.RequestType.RAW);
request.setType(jsOMS.Message.Request.RequestType.FILE);
request.setUri(this.uri);
request.setMethod(jsOMS.Message.Request.RequestMethod.POST);
request.setRequestHeader('HTTP_X_REQUESTED_WITH', 'XMLHttpRequest');
request.setSuccess(function (xhr)
{
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]) {
self.responseManager.run(response[k].type, response[k]);
} else {
self.success[formId](response[k].type, response[k]);
}
if (!self.success[formId]) {
self.responseManager.run(null, response);
} else {
self.success[formId](null, response);
}
} catch (e) {
console.log(e);
jsOMS.Log.Logger.instance.error(e);
jsOMS.Log.Logger.instance.error('Invalid media upload response: ' + xhr.response);
}

View File

@ -156,7 +156,7 @@ class UploadFile
}
if (!\is_dir($path)) {
Directory::create($path, 0655, true);
Directory::create($path, 0755, true);
}
if (!\is_uploaded_file($f['tmp_name'])) {

View File

@ -2,7 +2,7 @@
<header><h1><?= $this->getHtml('Media') ?></h1></header>
<div class="inner">
<form>
<form id="<?= $this->form; ?>-upload">
<table class="layout wf-100">
<tbody>
<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>
<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>
</form>
</div>