forked from Jrohy/webssh
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsftpclient.go
65 lines (59 loc) · 1.26 KB
/
sftpclient.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package core
import (
"io"
"mime/multipart"
"os"
"github.com/pkg/sftp"
)
// CreateSftp 创建sftp客户端
func (sclient *SSHClient) CreateSftp() error {
err := sclient.GenerateClient()
if err != nil {
return err
}
client, err := sftp.NewClient(sclient.Client)
if err != nil {
return err
}
sclient.Sftp = client
return nil
}
// Mkdirs 创建目录
func (sclient *SSHClient) Mkdirs(path string) error {
if _, err := sclient.Sftp.Stat(path); os.IsNotExist(err) {
return sclient.Sftp.MkdirAll(path)
}
return nil
}
// Download 下载文件
func (sclient *SSHClient) Download(srcPath string) (*sftp.File, error) {
return sclient.Sftp.Open(srcPath)
}
// Upload 上传文件
func (sclient *SSHClient) Upload(file multipart.File, id, dstPath string) error {
dstFile, err := sclient.Sftp.Create(dstPath)
if err != nil {
return err
}
defer dstFile.Close()
defer func() {
// 上传完后删掉slice里面的数据
if len(WcList) < 2 {
WcList = nil
} else {
for i := 0; i < len(WcList); i++ {
if WcList[i].Id == id {
WcList = append(WcList[:i], WcList[i+1:]...)
break
}
}
}
}()
wc := WriteCounter{Id: id}
WcList = append(WcList, &wc)
_, err = io.Copy(dstFile, io.TeeReader(file, &wc))
if err != nil {
return err
}
return nil
}