Загрузка файла не в формате PDF с использованием jQuery AJAX вызывает проблемы - PullRequest
0 голосов
/ 23 мая 2019

Мне было поручено создать загрузчик html-файлов, который должен создать запрос POST к нашей конечной точке ORDS.

Я нашел решение, которое хорошо работает с PDF-файлами, но когда я пытаюсь загрузить что-то еще, начинают появляться проблемы.

Это мой код:

$('#login-form').submit(function(e) {
    e.preventDefault();
    if (document.getElementById("fileinput").value != "") {
        AJAXSendRequest();
    } else {
        document.getElementById("alertfile").style.display = "block";
    }
    return false;
});

function AJAXSendRequest() {
    var formData = new FormData();
    formData.append("file", document.getElementById("fileinput").files[0]);
    var settings = {
        "async": true,
        data: formData,
        processData: false,
        contentType: document.getElementById("fileinput").files[0].type,
        "crossDomain": true,
        "url": "http://192.168.0.145:7001/ords/dads/media_module/media/",
        "method": "POST",
        "headers": {
            "Content-Type": document.getElementById("fileinput").files[0].type,
            "filename": document.getElementById("fileinput").files[0].name,
            "inWHAT_DOC": tipo,
            "inID_DOC_INSIDE": document.getElementById("id").value.toString()
        }
    }
    $.ajax(settings).done(function(response) {
        document.getElementById("successfile").style.display = "block";
        // window.close();
    });
}

Я получаю HTTP201 независимо от того, какой файл я загружаю, но это результат чтения загруженного XML-файла

-----------------------------19718198955447
Content-Disposition: form-data; name="file"; filename="AutoResponder.xml"
Content-Type: text/xml

<?xml version="1.0" encoding="utf-8"?>
<AutoResponder LastSave="2019-04-01T11:26:51.2600418+02:00" FiddlerVersion="5.0.20182.28034">
  <State Enabled="false" Fallthrough="false" UseLatency="false" />
</AutoResponder>
-----------------------------19718198955447--

FormData каким-то образом обернут в эту странную строку, которая также отображается в загруженном файле (но не в pdf) (число изменяется с каждым запросом), и эти два заголовка всегда добавляются в начало файла.

Content-Disposition: form-data; name="file"; filename="AutoResponder.xml"
Content-Type: text/xml

Есть что-то, что я делаю не так? Заранее спасибо

РЕДАКТИРОВАТЬ: запросы выполняются с помощью curl без проблем.

curl -X POST http://192.168.0.145:7001/ords/dads/media_module/media/ -H 'Content-Type: image/jpeg' -H 'Host: 192.168.0.145:7001' -H 'filename: testimgcurl.jpg' -H 'inID_DOC_INSIDE: 1240187' -H 'inWHAT_DOC: C Contratti Appalto' --data-binary @ch4.jpg

1 Ответ

0 голосов
/ 23 мая 2019

После еще нескольких экспериментов я использовал XMLHttpRequest.

Это рабочий код.

var file = document.getElementById("fileinput").files[0];
var data = new Blob([file], {type: file.type});
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
    if (this.readyState === 4) {
        console.log(this.responseText);
    }
});
xhr.open("POST", "http://192.168.0.145:7001/ords/dads/media_module/media/");
xhr.setRequestHeader("Content-Type", file.type);
xhr.setRequestHeader("Host", "192.168.0.145:7001");
xhr.setRequestHeader("filename", file.name);
xhr.setRequestHeader("inWHAT_DOC", tipo);
xhr.setRequestHeader("inID_DOC_INSIDE", id);
xhr.setRequestHeader("cache-control", "no-cache");
xhr.send(data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...