2017-03-29 2 views
0

Ich versuche ein Bild von Unity an meine NodeJS API zu senden, aber leider kann ich es nicht funktionieren lassen. Hier ein Auszug meiner C# -Code:POST-Anfrage mit Bild von Unity3D senden

private string POSTUrl = "http://myNodeJSAPI.com/upload-image"; 
private Dictionary<string, string> postHeader = new Dictionary<string, string>(); 

public WWW POST() { 
    WWW www; 
    postHeader["content-Type"] = "application/octet-stream"; 
    postData = File.ReadAllBytes("Assets/Resources/ImageIWantToSend.png"); 
    www = new WWW(POSTUrl, postData, postHeader); 
    StartCoroutine(WaitForRequest(www)); 
    return www; 
} 

IEnumerator WaitForRequest(WWW www) 
{ 
    yield return www; 
    if (www.error == null) 
    { 
     Debug.Log("WWW Ok!: " + www.text); 
    } 
    else 
    { 
     Debug.Log("WWW Error: " + www.error); 
    } 
} 

und hier der relevante Teil meiner NodeJS ein:

app.post('/upload-image', rawBody, function (req, res) { 
     console.log("File received!"); 
     if (req.rawBody && req.bodyLength > 0) { 
      fs.writeFile("/tmp/ImageIWantToSend.png", req.rawBody, function (err) { 
       if (err) { 
        return console.log(err); 
       } 
       console.log("Image has been saved! Starting other things..."); 
      }) 
     } 
    } 

Die Anforderung gesendet wird, aber nie von der API erhalten (ich 503 falsches Gateway) . Ich versuche die gleiche Anfrage außerhalb Einheit und es scheint zu funktionieren (mit Postman: grundlegende Post-Anfrage mit Bild als Binärdatei angehängt).

Habe ich einen Fehler gemacht oder gibt es einen anderen Weg, dies zu erreichen? Danke!

EDIT: Ich löste schließlich das Problem, indem application/octet-stream zu text/html ändern. Wenn es eine bessere Möglichkeit gibt, Daten an Nodejs zu senden, bin ich immer noch interessiert

Antwort

1

Check out Unity neue UnityWebRequest class.It ist ein Ersatz für das Original WWW.

Sie können auch die Klassen C# WebClient oder HttpWebRequest verwenden. Sie arbeiten mit Unity, wenn Sie kein WebGL-Build verwenden.

Dies ist auch ein good unity plugin Anfragen zu behandeln, obwohl es nicht kostenlos ist.

+0

Oh danke Ich habe UnityWebRequest nicht gesehen, ich werde es mir ansehen. –

+0

Ich habe mir die gleichen Dokumente angeschaut und genau das getan, was sie vorschlägt ... Ich kann es bekommen, um die POST-Anfrage zu stellen, aber es enthält keine der Daten, die ich aufnehmen möchte. Frage mich, was ich falsch mache ... – jckstl