Проблема с загрузкой файлов Есть решение

Сразу скажу, что я был на странице https://developers.webasyst.ru... 

Есть плагин, который с формы на фронте должен загрузить файл на сервер (что дальше этот плагин должен делать с файлом по сути не важно)

Есть форма:

<form action="" id="js_vin_form" enctype="multipart/form-data">
    <input type="file" name="image" class="js_input_file">
    <input type="submit" value="[`Send a request`]" class="main_button">
</form>

Есть js:

function podbor_send_file_action(params){
    /*
    params = object{
        &#039;data_to_send&#039;,
        &#039;handler&#039;,
        &#039;callback&#039;,
        &#039;dom&#039;
    };
    */
    console.log(&#039;what i try send:&#039;, params.data_to_send);
    $.ajax({
        type: &#039;POST&#039;,
        url: params.handler,
        cache: false,
        contentType: false,
        processData: false,
        data: params.data_to_send,
        dataType : &#039;json&#039;,
        success: function(data, textStatus, jqXHR ){
            params.callback(data, params.dom);
        }
    }).fail(function(data) {
        console.log("error", JSON.stringify(data));
        console.log("error", data);
    });
}
function vin_form_file_callback(data, dom){
    console.log(&#039;answer: &#039;, data);
}
$(&#039;#js_vin_form&#039;).on(&#039;submit&#039;, function (event) { 
    event.preventDefault();
    var file_data = new FormData();
    file_data.file = $(this).find(&#039;.js_input_file&#039;)[0].files[0];
    podbor_send_file_action({data_to_send:file_data, handler:"/info/req2b24/upl-file/", callback:vin_form_file_callback, dom:$(this)});
    return false;
});

Что выводится в консоль непосредственно перед отправкой в строке "console.log('what i try send:', params.data_to_send);":


Т.к. отправляется это добро через ajax то есть вот такой вот контроллер, в котором я пока что просто пытаюсь получить файл из формы:

class siteReq2b24PluginFrontendUplController extends waJsonController {
    public $my_response;

    public function execute(){
        $this->my_response = array();
        $file = waRequest::file(&#039;image&#039;);
        $this->my_response[&#039;file&#039;] = $file;
        $this->my_response[&#039;files&#039;] = $_FILES;
        $this->my_response[&#039;file_uploaded&#039;] = $file->uploaded();

        $this->response = $this->my_response;
    }
}

И вот что я вижу в качестве ответа:


Если использовать пример из шаблона + js то файл будет находиться в $_FILES, однако по какой-то причине webasyst видимо отсекает файл.


Вопрос: как мне через ajax загрузить файл на сервер?

P.S. Что забавно, пришлось редактировать данный пост, потому что в первый раз скриншоты не приложились=)

4 ответа

  • 1
    Bashka Sekir 24 марта 2023 11:26 #

    Форум во многих местах апострофы рубанул и заменил их на код 

    &#039;
  • 2

    Пишу по памяти, могу где-то опечататься.

    function uploadFile(file, data) {
      const formData = new FormData();
      if(data) for (const key in data) formData.append(key, data[key]);
      formData.append('files', file);
      return $.ajax({
        xhr() {
          return new window.XMLHttpRequest();
        },
        url: '/your/url',
        data: formData,
        cache: false,
        contentType: false,
        processData: false,
        type: 'POST'
      })
    }

    • +1
      Bashka Sekir Bashka Sekir 24 марта 2023 13:45 #

      у меня же в примере по сути отправка так же и происходит.

  • 1
    Bashka Sekir 31 марта 2023 17:06 # Решение

    Короче ошибка была в том, что я файл добавлял через точку, как в объект, а надо было через append. С самого начала так и сделал, но сбило с толку, что при добавлении через append в консоли показывает что внутри ничего нет, хотя на самом деле есть, а при добавлении через точку в консоли все хорошо, а на самом деле ничего нет. вот так

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите