当前位置: 首页 > 面试题库 >

转到:跟踪POST请求进度

贺俊楚
2023-03-14
问题内容

我正在Go中为Linux编写一个ShareX克隆,该克隆通过http POST请求将文件和图像上传到文件共享服务。

我目前正在使用http.Client和Do()发送请求,但我希望能够跟踪较大文件的上传进度,这些文件最多需要一分钟的时间来上传。目前,我能想到的唯一方法是手动在端口80上打开与网站的TCP连接,并以块的形式写入HTTP请求,但我不知道它是否可以在https网站上使用,我不确定是否这是最好的方法。

还有其他方法可以做到这一点吗?


问题答案:

您可以创建自己的程序io.Reader来包装实际的阅读器,然后可以在每次Read调用时输出进度。

类似于以下内容:

type ProgressReader struct {
    io.Reader
    Reporter func(r int64)
}

func (pr *ProgressReader) Read(p []byte) (n int, err error) {
    n, err = pr.Reader.Read(p)
    pr.Reporter(int64(n))
    return
}

func main() {
    file, _ := os.Open("/tmp/blah.go")
    total := int64(0)
    pr := &ProgressReader{file, func(r int64) {
        total += r
        if r > 0 {
            fmt.Println("progress", r)
        } else {
            fmt.Println("done", r)
        }
    }}
    io.Copy(ioutil.Discard, pr)
}


 类似资料:
  • 我应该创建自己的自定义属性,并将它们记录在insequence和Outsequence中吗?

  • 我有一个Spring Boot应用程序,它依赖于spring-cloud-starter-sleuth-3.0.3和spring-cloud-sleuth-zipkin-3.0.3。 我需要在从webclient调用API时将跟踪id传递给请求头。 示踪剂。currentSpan()为null,因此引发NPE。 根据文档,给出了将跟踪id添加到响应头的方法https://docs.spring.i

  • 希望在Mulesoft HTTP请求中实现以下功能 卷曲“https://somedomain.com/1/1/1/search“ -X POST -H”授权:承载令牌”

  • 我向我的flask应用所在的服务器发出了python post请求。它运行良好,我能够获得所需的数据。 但我想用POSTMAN测试API。我无法做到这一点,因为在某种程度上我对邮递员并不熟悉。 下面是我的python代码。 我正在努力解决这样一个问题:我试图发布到服务器上的数据和文件应该是原始json还是表单数据,或者是正文的x-www-form-urlencoded部分。还有实际的结构应该是什么

  • 问题内容: 我正在更改网站的很大一部分以使用jQuery Address的深层链接AJAX功能。我正在使用URI之类的。 我已经阅读了很多有关使用此功能跟踪流量的信息,但是我想知道是否有可能以更传统的方式进行此操作… 每个AJAX请求都调用一个PHP函数,该函数生成一个页面并通过包装返回它,这使我可以轻松定义自定义页面标题等。 如果我将分析代码放在该页面上,jQuery会调用该页面来触发它来跟踪访

  • 我试图通过ajax发布json数据。json数据包含一个大的html表。然而,这个POST请求被转换成GET请求,我得到错误414(请求-URI太长)。我知道jsonp POST请求转换成GET,但是为什么我的json请求转换成GET?