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

如何在流中上传文件?

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

如何在流中上传文件?

如果需要设置

Content-Length
,可以手动完成。以下代码段是将文件和其他参数作为流上传的示例(基于Golang中无缓冲区Multipart
POST的代码

//NOTE: for simplicity, error check is omittedfunc uploadLargeFile(uri, filePath string, chunkSize int, params map[string]string) {    //open file and retrieve info    file, _ := os.Open(filePath)    fi, _ := file.Stat()    defer file.Close()    //buffer for storing multipart data    byteBuf := &bytes.Buffer{}    //part: parameters    mpWriter := multipart.NewWriter(byteBuf)    for key, value := range params {        _ = mpWriter.WriteField(key, value)    }    //part: file    mpWriter.CreateFormFile("file", fi.Name())    contentType := mpWriter.FormDataContentType()    nmulti := byteBuf.Len()    multi := make([]byte, nmulti)    _, _ = byteBuf.Read(multi)    //part: latest boundary    //when multipart closed, latest boundary is added    mpWriter.Close()    nboundary := byteBuf.Len()    lastBoundary := make([]byte, nboundary)    _, _ = byteBuf.Read(lastBoundary)    //calculate content length    totalSize := int64(nmulti) + fi.Size() + int64(nboundary)    log.Printf("Content length = %v byte(s)n", totalSize)    //use pipe to pass request    rd, wr := io.Pipe()    defer rd.Close()    go func() {        defer wr.Close()        //write multipart        _, _ = wr.Write(multi)        //write file        buf := make([]byte, chunkSize)        for { n, err := file.Read(buf) if err != nil {     break } _, _ = wr.Write(buf[:n])        }     //write boundary        _, _ = wr.Write(lastBoundary) }()    //construct request with rd    req, _ := http.NewRequest("POST", uri, rd)    req.Header.Set("Content-Type", contentType)    req.ContentLength = totalSize    //process request    client := &http.Client{}    resp, err := client.Do(req)    if err != nil {        log.Fatal(err)    } else {        log.Println(resp.StatusCode)        log.Println(resp.Header)        body := &bytes.Buffer{}        _, _ = body.ReadFrom(resp.Body)        resp.Body.Close()        log.Println(body)    }}


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

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

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