UnityWebRequest字节数组

时间:2018-06-19 15:06:21

标签: c# node.js unity3d

我正在尝试使用网络请求捕获的每个帧,使用要在NodeJS API中处理的发布请求发送图像字节。

使用此代码:

Debug.Log(imageBytes.Length); //Prints a number
    Debug.Log(imageBytes); //Prints the array type (?)
    Debug.Log(imageBytes[1]); //Prints the byte

    UnityWebRequest www = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPOST);
        UploadHandlerRaw handler = new UploadHandlerRaw(imageBytes);
        handler.contentType= "application/x-www-form-urlencoded";
        www.uploadHandler = handler;
        Debug.Log(www.uploadHandler.data[1]);
        www.downloadHandler = new DownloadHandlerBuffer();

        yield return www.SendWebRequest();
        string jsonResponse = www.downloadHandler.text;
        Debug.Log(jsonResponse);

但是,当我在API中执行console.log的{​​{1}}时,它会打印

  

{}

。显然,req.body不会发送数据。

对此有何想法?

3 个答案:

答案 0 :(得分:0)

您为二进制数据使用了错误的内容类型。如果使用WWWForm类,它将自动将此标头设置为multipart / form-data。尝试以下代码:

    var wwwForm = new WWWForm();
    wwwForm.AddBinaryData ("image", imageBytes, "imagedata.raw");
    var request = UnityWebRequest.Post (url, wwwForm);
    yield return request.SendWebRequest ();

答案 1 :(得分:0)

我找到了一种使它工作的方法。

需要将Unity中的代码更改为:

    using (UnityWebRequest www = UnityWebRequest.Post(url, webForm))
            {
        www.SetRequestHeader("Content-Type", "text/html");
        www.uploadHandler = new UploadHandlerRaw(imageBytes);
        www.uploadHandler.contentType = "text/html";
        www.downloadHandler = new DownloadHandlerBuffer();
        yield return www.SendWebRequest();
            }

在Node.JS中:

app.use(cors());
var options = {
    inflate: true,
    limit: '3000kb',
    type: 'text/html'
  };
app.use(bodyParser.raw(options));

答案 2 :(得分:-1)

几个月前,我尝试了一些新的webrequest类,并且在将数据发布到服务器时遇到了类似的问题,然后我又切换回旧的www类来处理它,它就像一个魅力。