суббота, 1 октября 2016 г.

Размышления о загрузке

Так вот, возвращаясь к работе. После запила двига с сессиями, у меня несколько развязались руки, в плане возможностей: Выгрузку документов с другого сервера реализовать стало в легкую: пишем 1 модуль, экшены которого умеют отдавать разные файлы.

В моем случае, он, примерно, умеет отдавать файлы проектов, багтрекера (я тут стал задумываться, а мб парсер ворда наковырять? а что, phpword, вроде, есть) ну и т.д. и т.п, в общем, много он умеет. и механизм примерно такой: есть основной домен, где проходит авторизация пользователя, есть второстепенный домен (почти cdn), на который сыплется нагрузка с загрузкой/выгрузкой файлов, и есть отдельный сервер, на котором в кроне вертятся сервисы (назовем их так). Тем самым, удалось разнодить инфраструктуру и изолировать задачи, требующие потребления ресурсов (тут следует понимать, что сднов можно быть сколько нужно).

Но, есть 1 но: с загрузкой документов: на данный момент, я знаю 2 способа загрузки документов на сервер:

  1. загрузка с применением js<=>html5
  2. классический способ с использованием iframe
Однако, в случае, если вы грузите файлики ~50-80mb  1 вариант отпадает сразу, так как js все-таки не супер-пупер штука, чтобы побайтно передавать большие файлы на сервер, а иногда и пачку, в общем, не самое лучшее решение в выставленных условиях.
Остается второй способ, с использованием iframe, это когда делаем невидимый iframe на странице и с формы на него отправляем данные, а потом просто парсим эхо ответ в iframe. Проверенный, работает как надо, пусть и не удобно статус бар загрузки делать... Так вот, а как быть, если у тебя есть main.domain.ru, с которого ты пытаешься получить возможность загрузить и cdn.domain.ru, на который ты грузишь, ведь нынешние стандарты запрещают обращаться к iframe, если его содержимое с другого домена и document.domain тоже не работает? 
пришлось использовать модальное окно. То есть, нажали на кнопку, вывалилось окошко:


function openModalUpload() {
    var newWin = window.open('http://cdn.domain.ru:8080/page/download/Upload?gid='+currentRDocID, 'Загрузка файлов', 'width=650,height=200,left=400,top=100,menubar=no,toolbar=no,resizable=no,location=no,status=no,personalbar=no');
    rdInteevalID = setInterval(function(){
        if(newWin.closed)
        {
            showFiles(currentRDocID);
            clearInterval(rdInteevalID);
        }},700);
}


Ну и в окошке, соответственно, диалог с выбором файлов. Примечательно, что iframe расположен там же и по завершению загрузки я смотрю содержимое оного, а там, обычно в JSON формате лежит либо ошибка, либо сообщение что все ок. Если все ок - закрываем окно и обновляем список файлов. Уродливо? Да. Но функционально, учитывая, что используется только js + html & php, без лишних доп сервисов (типа nodejs). 
Всегда следует помнить, что чем больше технологий, сервисов используется в инфраструктуре ERP, тем дороже будет обслуживание железа (+само железо), саппорт системы в целом и разработка оной, так как чем больше всяких языков, тем больше всяких программистов, что в энтерпрайзе далеко не всегда приветствуется, особенно, когда фирма не размеров гугла. Кто в теме, тот поймет, в общем.
На случай, если кто-то подумывает, что я пытаюсь оправдаться - это не так. Разъясняю позицию. Приветствий моего лба с граблями было уже много, поэтому сейчас я избрал путь адекватного минимализма, ибо лоб, все же, не из камня и довольно чувствительно каждый раз по нему получать.
За сим спешу откланяться, пока что.   

Комментариев нет:

Отправить комментарий