解析golang中的javascript Blob

解析golang中的javascript Blob,javascript,go,Javascript,Go,在Go中,您可以使用Ajax和r.ParseMultipartForm()读取发送的表单,后者使用表单请求数据填充表单映射 func form(w http.ResponseWriter, r *http.Request) { r.ParseMultipartForm(500) // fmt.Fprintf(w, "This is the value of %+v", r.Form) } 但是,我还没有找到解析blob的方法。每当我发送Blob而不是发送表单时,上面的代码都会返

在Go中,您可以使用Ajax和
r.ParseMultipartForm()
读取发送的表单,后者使用表单请求数据填充
表单
映射

func form(w http.ResponseWriter, r *http.Request) {
    r.ParseMultipartForm(500) //
    fmt.Fprintf(w, "This is the value of %+v", r.Form)
}
但是,我还没有找到解析blob的方法。每当我发送Blob而不是发送表单时,上面的代码都会返回一个空映射。也就是说,当我发送此邮件时:

var blob = new Blob([JSON.stringify(someJavascriptObj)]);
//XHR initialization, etc. etc.
xhr.send(blob);
var form = new FormData(document.querySelector("form"));
//...
xhr.send(form);
上面的Go代码不起作用。现在,当我发送此邮件时:

var blob = new Blob([JSON.stringify(someJavascriptObj)]);
//XHR initialization, etc. etc.
xhr.send(blob);
var form = new FormData(document.querySelector("form"));
//...
xhr.send(form);
我可以毫无问题地读取表单数据

r.ParseMultipartForm(500)
这里可能返回了一个错误?尝试捕获错误:

if err := r.ParseMultipartForm(500); err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
}

也可以考虑将500字节的内存限制写入到临时文件中。

< P>我假定JavaScript的BLB是一个十六进制字符串,它最终可以转换为<代码> [Byth >,这是GO中的JSON的标准类型。

// Once you get the blob
blobString := `7b22666f6f223a205b22626172222c202262617a222c2039395d7d`

b, _ := hex.DecodeString(blobString)
json := string(b)
fmt.Println(json) // prints out {"foo": ["bar", "baz", 99]}

您可能需要查看
编码/hex
编码/binary
包,对从Javascript获取的blob进行解码,以便在Go中键入
[]字节
,如果还没有的话。

我认为Javascript将blob视为文件,因此您可以在
r.MultipartForm.file
中查看它,获取文件头,打开它,读取,解码和解析。 举个例子

r.ParseMultipartForm(500) 
fmt.Fprintf(w, "This is the value of %+v", *r.MultipartForm.File)
}

我认为您需要使用json包。查看这篇文章@Snowman,json包帮助编码和解码json数据。我想要的是从http请求中检索二进制数据。我看不出这个方案对实现这一目标有什么帮助。那我就不懂这个例子了。看起来你正在发送一个字符串化的对象。。。我处理json对象的唯一方法是使用package encoding/json。对不起,我忘了在我的原始代码中提到这一点。我把它贴在这里,没有错误检查来简化它。哦,好的。你能记录并添加你得到的原始http请求吗?请参阅httputilMaybe,但在此之前,我必须能够实际检索该字符串。我的问题是,我不知道go在哪里存储未作为键值对发送的数据,我相信这就是我的情况。简而言之,当我发送blob时,Request.Form返回一个空值。