将二进制数据发送到服务器

时间:2016-04-27 09:28:50

标签: javascript ajax go binary-data

我创建了一个包含一些数据的数组缓冲区:

var myArray = new ArrayBuffer(512);
var longInt8View = new Uint8Array(myArray);
for (var i = 0; i < longInt8View.length; i++) {
    longInt8View[i] = i % 255;
}

我通过POST发送给服务器:

if (window.XMLHttpRequest) {
    var xmlhttp = new XMLHttpRequest();
} else {
    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
        action(xmlhttp.responseText);
    }
};
xmlhttp.open("POST", 'http://somedomain.com:8080', true);
xmlhttp.send(myArray);
var action = function (response) {
    console.log(response);
};

我现在想在go代码中接收这些二进制数据,并用它做一些事情。我怎么能这样做?

package main

import (
        "fmt"
        "net/http"
)

func handleRequest(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Access-Control-Allow-Origin", "*")
        w.Header().Set("Access-Control-Allow-Headers", "*")
        w.Header().Set("Content-Type", "text/plain")
        fmt.Fprintf(w, "%s", r.Body)
}

func main() {
        http.HandleFunc("/", handleRequest)
        http.ListenAndServe(":8080", nil)
}

我可以在身体内部看到对内存块的引用,但是如何才能获得这个特定的内容呢?

1 个答案:

答案 0 :(得分:0)

不要通过HTTP协议发送二进制数据。在Base64中转换它们。将它们作为普通字符串发送。在服务器端将它们从Base64解码为二进制文件。

要将二进制数据转换为base64,您可以使用函数btoa