登录
首页 >  Golang >  Go问答

计算多部分表单帖子的内容长度

来源:Golang技术栈

时间:2023-03-04 15:17:37 467浏览 收藏

golang学习网今天将给大家带来《计算多部分表单帖子的内容长度》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到golang等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

我正在尝试上传文件而不将其加载到内存中,如下所示。在这种情况下,像 S3 这样的服务需要一个Content-Length集合。是否有内置的 go- lang 可以做到这一点,或者我必须自己计算它。

package main

import (
    "io"
    "mime/multipart"
    "net/http"
    "os"
    "path/filepath"
)

func newfileUploadRequest(uri string, params map[string]string, paramName, path string) (*http.Request, chan error, error) {
    file, err := os.Open(path)
    if err != nil {
        return nil, nil, err
    }
    bodyReader, bodyWriter := io.Pipe()
    multiWriter := multipart.NewWriter(bodyWriter)
    errChan := make(chan error, 1)
    go func() {
        defer bodyWriter.Close()
        defer file.Close()
        part, err := multiWriter.CreateFormFile(paramName, filepath.Base(path))
        if err != nil {
            errChan 

任何帮助将非常感激。

正确答案

http.Request.Write 的文档中它指出

如果 Body 存在,Content-Length

这意味着如果您不设置 a Content- Lengthhttp.Request.Write将使用分块传输编码。添加它是HTTP/1.1为了摆脱Content- Length像这样计算流传输的需要。

所以通常 Go 程序使用分块编码,不需要设置Content-Length. 任何现代 HTTP 堆栈都应该支持分块传输编码。

但是S3 不支持分块传输编码,所以我认为你必须Content- Length自己计算。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>