Go 如何从多部分表单中提取文件
我正在编写一个Go客户端,通过REST-API创建备份。对GET请求使用多部分表单数据的REST-API响应。因此响应(type*http.response)主体的内容如下所示:Go 如何从多部分表单中提取文件,go,multipartform-data,Go,Multipartform Data,我正在编写一个Go客户端,通过REST-API创建备份。对GET请求使用多部分表单数据的REST-API响应。因此响应(type*http.response)主体的内容如下所示: --1ceb25134a5967272c26c9f3f543e7d26834a5967272c26c9f3f595caf08 Content-Disposition: form-data; name="configuration"; filename="test.gz" Cont
--1ceb25134a5967272c26c9f3f543e7d26834a5967272c26c9f3f595caf08
Content-Disposition: form-data; name="configuration"; filename="test.gz"
Content-Type: application/x-gzip
...
--1ceb25134a5967272c26c9f3f543e7d26834a5967272c26c9f3f595caf08--
如何从响应正文中提取zip文件
我尝试使用内置(net/http)方法,但这些方法需要一个请求结构。使用包。假设resp
是*http.Response
,请使用以下代码迭代各部分
contentType := resp.Header.Get("Content-Type")
mediaType, params, err := mime.ParseMediaType(contentType)
if err != nil {
log.Fatal(err)
}
if strings.HasPrefix(mediaType, "multipart/") {
mr := multipart.NewReader(resp.Body, params["boundary"])
for {
p, err := mr.NextPart()
if err == io.EOF {
return
}
if err != nil {
log.Fatal(err)
}
// p.FormName() is the name of the element.
// p.FileName() is the name of the file (if it's a file)
// p is an io.Reader on the part
// The following code prints the part for demonstration purposes.
slurp, err := ioutil.ReadAll(p)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Part %q, %q: %q\n", p.FormName(), p.FileName(), slurp)
}
}
答案中的代码通过调用log.Fata来处理错误。调整错误处理以满足应用程序的需要