栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Go从一个HTTP请求中解析文件和JSON数据?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Go从一个HTTP请求中解析文件和JSON数据?

在您的示例中,您尝试读取r.Body,就好像它被剥离了请求的PDF部分一样,但事实并非如此。您需要分别处理PDF和JSON这两个部分。为此使用http。(*
Request).MultipartReader()

r.MultipartReader()将返回mime /
multipart.Reader
对象,因此您可以使用r.NextPart()函数遍历各个部分并分别处理每个部分。

因此,您的处理程序函数应如下所示:

func (s *Server) PostFileHandler(w http.ResponseWriter, r *http.Request) {    mr, err := r.MultipartReader()    if err != nil {        http.Error(w, err.Error(), http.StatusInternalServerError)        return    }    doc := Doc{}    for {        part, err := mr.NextPart()        // This is OK, no more parts        if err == io.EOF { break        }        // Some error        if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return        }        // PDF 'file' part        if part.FormName() == "file" { doc.Url = part.FileName() fmt.Println("URL:", part.FileName()) outfile, err := os.Create("./docs/" + part.FileName()) if err != nil {     http.Error(w, err.Error(), http.StatusInternalServerError)     return } defer outfile.Close() _, err = io.Copy(outfile, part) if err != nil {     http.Error(w, err.Error(), http.StatusInternalServerError)     return }        }        // JSON 'doc' part        if part.FormName() == "doc" { jsonDeprer := json.NewDeprer(part) err = jsonDeprer.Depre(&doc) if err != nil {     http.Error(w, err.Error(), http.StatusInternalServerError)     return } fmt.Println(doc.Title, doc.Url, doc.Cat, doc.Date)        }    }    doc.Id = len(docs) + 1    err = s.db.Insert(&doc)    checkErr(err, "Insert failed")    s.Ren.JSON(w, http.StatusOK, &doc)}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/397929.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号