簡體   English   中英

使用jQuery AJAX上傳非pdf文件會導致問題

[英]Uploading a non-pdf file using jQuery AJAX causes issues

我的任務是創建一個html文件上傳器,它必須為我們的ORDS端點創建一個POST請求。

我想出了一個適用於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 -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

經過一些實驗,我最終使用了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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM