1 回答

TA貢獻1963條經驗 獲得超6個贊
我使用 golang io.Pipe() 使它工作。 Pipewriter 將字節以塊的形式寫入管道,而 pipeReader 讀取器則從另一端寫入。使用 go-routine 的原因是有一個非阻塞的寫操作,而同時讀取從管道發生。
注意:關閉管道寫入器 (w.Close()) 以在流上發送 EOF 很重要,否則它不會關閉流。
func DownloadZip() ([]byte, error) {
r, w := io.Pipe()
defer r.Close()
defer w.Close()
zip, err := os.Stat("temp.zip")
if err != nil{
return nil, err
}
go func(){
f, err := os.Open(zip.Name())
if err != nil {
return
}
buf := make([]byte, 1024)
for {
chunk, err := f.Read(buf)
if err != nil && err != io.EOF {
panic(err)
}
if chunk == 0 {
break
}
if _, err := w.Write(buf[:chunk]); err != nil{
return
}
}
w.Close()
}()
body, err := ioutil.ReadAll(r)
if err != nil {
return nil, err
}
return body, nil
}
如果有人有其他方法,請告訴我。
- 1 回答
- 0 關注
- 313 瀏覽
添加回答
舉報