您好,我想将下载的文件原始响应附加到文件中。假设我正在尝试下载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原始数据附加到文件中?
答案 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响应是部分复制的,则会自动将其追加