mirror of
https://github.com/1Panel-dev/KubePi.git
synced 2025-10-05 15:26:58 +08:00
56 lines
879 B
Go
56 lines
879 B
Go
package podtool
|
|
|
|
import (
|
|
"bufio"
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
func (p *PodTool) CopyFromPod(filePath string, destPath string) error {
|
|
reader, outStream := io.Pipe()
|
|
|
|
p.ExecConfig = ExecConfig{
|
|
Command: []string{"tar", "cf", "-", filePath},
|
|
Stdin: os.Stdin,
|
|
Stdout: outStream,
|
|
Stderr: os.Stderr,
|
|
NoPreserve: true,
|
|
}
|
|
|
|
err := p.Exec(Download)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
file, err := os.OpenFile(destPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
r := bufio.NewReader(reader)
|
|
w := bufio.NewWriter(file)
|
|
size := 4 * 1024
|
|
buf := make([]byte, 4*1024)
|
|
for {
|
|
n, err := r.Read(buf)
|
|
if err != nil && err != io.EOF {
|
|
return err
|
|
}
|
|
if n == 0 {
|
|
break
|
|
}
|
|
_, err = w.Write(buf[:n])
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if n < size {
|
|
break
|
|
}
|
|
}
|
|
err = w.Flush()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return err
|
|
}
|