I'm versuchen, eine Dateiupload-API, hier gegeben zu implementieren:
Mediafire file Upload
Ich bin erfolgreich in der Lage, die Post data & Get data hochzuladen, habe aber keine Ahnung, wie ich das x-filename-Attribut senden soll, das laut API-Leitfaden als Header data gedacht ist.
Mein Code:
xmlhttp=new XMLHttpRequest();
var formData = new FormData();
formData.append("Filedata", document.getElementById("myFile").files[0]);
var photoId = getCookie("user");
// formData.append("x-filename", photoId); //tried this but doesn't work
// xmlhttp.setRequestHeader("x-filename", photoId); //tried this too (gives error) [edited after diodeous' answer]
xmlhttp.onreadystatechange=function()
{
alert("xhr status : "+xmlhttp.readyState);
}
var url = "http://www.mediafire.com/api/upload/upload.php?"+"session_token="+getCookie("mSession")+"&action_on_duplicate=keep";
xmlhttp.open("POST", url);
// xmlhttp.setRequestHeader("x-filename", photoId); //tried this too, doesnt work. Infact nothing gets uploaded on mediafire. [edited after apsillers' answer]
// cant get response due to same origin policy
xmlhttp.send(formData);
Ihr Fehler
InvalidStateError: Es wurde versucht, ein Objekt zu verwenden, das nicht oder nicht mehr verwendbar ist
erscheint, weil Sie setRequestHeader
nach dem Aufruf von open
aufrufen müssen. Verschieben Sie einfach Ihre setRequestHeader
Zeile unter Ihre open
Zeile (aber vor send
):
xmlhttp.open("POST", url);
xmlhttp.setRequestHeader("x-filename", photoId);
xmlhttp.send(formData);
Verwendung: xmlhttp.setRequestHeader(key, value);
Überprüfen Sie, ob das Schlüssel-Wert-Paar tatsächlich in der Anfrage auftaucht:
In Chrome, irgendwo gefunden wie: F12: Developer Tools > Network Tab > Whatever request you have sent > "view source" under Response Headers
Wenn das von Ihnen hinzugefügte Paar je nach Ihrem Test-Workflow nicht vorhanden ist, müssen Sie möglicherweise nur Ihren Browser-Cache leeren. Um zu überprüfen, ob Ihr Browser den aktuellsten Code verwendet, können Sie die Quellen der Seite überprüfen, in Chrome finden Sie diese an einer Stelle wie: F12: Developer Tools > Sources Tab > YourJavascriptSrc.js" und überprüfen Sie Ihren Code.
Aber wie andere Antworten gesagt haben:
xhttp.setRequestHeader(key, value);
sollte ein Schlüssel-Wert-Paar zu Ihrem Anfrage-Header hinzufügen, stellen Sie nur sicher, dass Sie es nach Ihrem open()
und vor Ihrem send()
platzieren