나는 내가 NodeJS와 두를 사용하고 Content-Type: multipart/form-data
(http://docs.octoprint.org/en/master/api/fileops.html#upload-file)와 POST 요청비동기 폼 데이터 POST 요청 xmlhhtprequest와
를 전송하여 수행해야합니다 Octoprint의 REST API를에 파일을 업로드하는 것을 시도하고있다 라이브러리, XmlHttpRequest 및 양식 데이터. 하려고 할 때 :
var xhr = new xmlhttprequest() ;
var form = new formData() ;
form.append('exampleKey', 'exampleValue');
xhr.open("POST","octopi.local/api/local", true) ;
xhr.setRequestHeader("Content-Type","multipart/form-data") ;
xhr.send(form) ;
나는 위해 xhr.send 줄에서 오류가 발생합니다 :
TypeError: first argument must be a string or Buffer
나는 xhr.open 사용하여 동기 요청 한 경우 ("POST"를, URL, false)를이 오류가 사라집니다.
왜 그렇습니까? 그것을 비동기 요청으로 변환하는 방법이 있습니까?
편집 실제로, 나는 설명서를 실제로 이해하지 못합니다. form.append("filename", filepath, "exampleName")
을 사용하여 업로드 할 파일을 설정해야한다고 생각하지만 확실치 않습니다. 사실은 파일을 보내지 않고도 단순한 요청을 시도해도 TypeError가 발생한다는 것을 알았습니다.
EDIT2이 같은 오류를 반환 수정 된 코드입니다 : 당신은 당신의 코드에 오타가 있는지
var XMLHttpRequest=require('xmlhttprequest').XMLHttpRequest ;
var FormData = require('form-data');
var data = new FormData();
data.append("key","value");
var xhr = new XMLHttpRequest();
xhr.open('POST', "octopi.local/api/files/");
xhr.send(data);
업로드 할 파일을 어디에서 설정하고 있습니까? –
'비동기식/동기식 '키가 여기 있다고 생각합니다. POST를 동기식으로 설정하면 콜백 함수 이후의 모든 코드가 콜백이 반환 된 후에 실행됩니다. 반대로 비동기식 모드에서는 콜백 이후 코드가 반환되기 전에 실행됩니다. 따라서 결과가 필요하면 오류 메시지가 표시되지 않습니다. : 원하는 작업을 수행하기 위해 콜백 내에서 다른 콜백을 호출하지 않는 한 방법이 있다고 생각하지 않습니다. –
@VasilDininski : 사실, 설명서를 실제로 이해하지 못합니다. form.append ("filename", filepath, "exampleName")를 사용하여 업로드 할 파일을 설정해야한다고 생각합니다. 그러나 그것에 대해서는 확실하지 않습니다. 사실 나는 어떤 파일도 보내지 않고도 단순한 요청을 시도해도 TypeError가 발생한다는 것을 알게되었습니다. –