将原始Goreq.body响应附加到文件

时间:2018-07-10 07:17:37

标签: go gorequest

您好,我想将下载的文件原始响应附加到文件中。假设我正在尝试下载1GB的文件,并且下载过程将在多个请求中完成。假设每个请求100mb。现在,所有这10个部分都应该放在一个文件中进行读取。我不知道该如何实现。我正在使用GOREQ请求此资源,并且原始数据为Goreq.body格式。下面是我的示例代码

newFile := "./newfile.gz"
out, err := os.Create(newFile)
defer out.close()  

if err != nil {
    fmt.Println("Failed to download file")
    return
}

for i := 0; i < 10; i++ {
    // This will return the items in part of 100mb/part. 
    // GetRawDataFromEbay returns a goreq.body(raw) as its response
    response, _ = GetRawDataFromEbay(10485760) 

    out.Write(response) // This does not work
}

我知道接受[] byte作为参数。但是如何将检索到的goreq.body原始数据附加到文件中?

2 个答案:

答案 0 :(得分:0)

您可以使用fileObj.WriteAt(content,offSet)将内容附加到文件中。

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println("test")
    f, err := os.Create("/Users/sakthi-2528/test/test213123.txt")
    if err != nil {
        fmt.Println(err)
        return
    }
    n, err := f.WriteAt([]byte("Foo"), 0)
    if err != nil {
        fmt.Println(err)
        return
    }
    off := n
    n, err = f.WriteAt([]byte("Bar"), int64(off))
    if err != nil {
        fmt.Println(err)
        return
    }
    off += n
    _, err = f.WriteAt([]byte("FooBar"), int64(off))
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()
}

答案 1 :(得分:0)

好吧,找到答案了,看来我不需要做任何花哨的事情。我只需要使用io.copy就可以了。我的代码仅供参考,供其他遇到相同问题的人使用

newFile := "./newfile.gz"
out, err := os.Create(newFile)
defer out.close()   

if err != nil {
   fmt.Println("Failed to download file")
   return
}

for i := 0; i < 10; i++ {
    // This will return the items in part of 100mb/part. 
    // GetRawDataFromEbay returns a goreq.body(raw) as its response
    response, _ = GetRawDataFromEbay(10485760) 
    io.Copy(file, response) // Where file is an instance of *os.File
}

因此,基本上,如果将不同的响应(部分复制)复制到同一文件中时,Goreq.body响应是部分复制的,则会自动将其追加