2016-04-27 3 views
0

создать буфер массив, содержащий некоторые данные:Отправка двоичных данных на сервер

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); 
}; 

Теперь я хочу, чтобы получить эти двоичные данные в пойти код и сделать с ним что-то. Как я могу это сделать?

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) 
} 

Я вижу ссылку на блок памяти внутри тела, но как я могу получить это specificaly?

+0

тело запроса является [ 'io.Reader'] (https://golang.org/pkg/io/#Reader), вы прочитайте его. (на самом деле это 'io.ReadCloser', но вам не нужно закрывать его на сервере) – JimB

ответ

0

Не отправляйте бинарные данные по протоколу HTTP. Преобразуйте их в Base64. Отправьте их как обычную строку. Расшифруйте их с Base64 на двоичный с сервера.

для преобразования двоичных данных в base64 вы можете использовать функцию btoa

+1

Почему не двоичные данные? – khernik

+0

Вы определили тип контента как text/plain. Прокси-сервер мог нарушить ваш запрос, глядя на содержимое и распознать его как поврежденные данные. –

Смежные вопросы