mirror of https://github.com/Xhofe/alist
				
				
				
			✨ pikpak file upload
							parent
							
								
									9da2af8c49
								
							
						
					
					
						commit
						35fc1c87d2
					
				| 
						 | 
				
			
			@ -6,9 +6,12 @@ import (
 | 
			
		|||
	"github.com/Xhofe/alist/drivers/base"
 | 
			
		||||
	"github.com/Xhofe/alist/model"
 | 
			
		||||
	"github.com/Xhofe/alist/utils"
 | 
			
		||||
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	jsoniter "github.com/json-iterator/go"
 | 
			
		||||
	log "github.com/sirupsen/logrus"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type PikPak struct{}
 | 
			
		||||
| 
						 | 
				
			
			@ -230,7 +233,51 @@ func (driver PikPak) Delete(path string, account *model.Account) error {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func (driver PikPak) Upload(file *model.FileStream, account *model.Account) error {
 | 
			
		||||
	return base.ErrNotImplement
 | 
			
		||||
	if file == nil {
 | 
			
		||||
		return base.ErrEmptyFile
 | 
			
		||||
	}
 | 
			
		||||
	parentFile, err := driver.File(file.ParentPath, account)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	data := base.Json{
 | 
			
		||||
		"kind":        "drive#file",
 | 
			
		||||
		"name":        file.GetFileName(),
 | 
			
		||||
		"size":        file.GetSize(),
 | 
			
		||||
		"hash":        "1CF254FBC456E1B012CD45C546636AA62CF8350E",
 | 
			
		||||
		"upload_type": "UPLOAD_TYPE_RESUMABLE",
 | 
			
		||||
		"objProvider": base.Json{"provider": "UPLOAD_TYPE_UNKNOWN"},
 | 
			
		||||
		"parent_id":   parentFile.Id,
 | 
			
		||||
	}
 | 
			
		||||
	res, err := driver.Request("https://api-drive.mypikpak.com/drive/v1/files", base.Post, nil, &data, nil, account)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	params := jsoniter.Get(res, "resumable").Get("params")
 | 
			
		||||
	endpoint := params.Get("endpoint").ToString()
 | 
			
		||||
	endpointS := strings.Split(endpoint, ".")
 | 
			
		||||
	endpoint = strings.Join(endpointS[1:], ".")
 | 
			
		||||
	accessKeyId := params.Get("access_key_id").ToString()
 | 
			
		||||
	accessKeySecret := params.Get("access_key_secret").ToString()
 | 
			
		||||
	securityToken := params.Get("security_token").ToString()
 | 
			
		||||
	client, err := oss.New("https://"+endpoint, accessKeyId,
 | 
			
		||||
		accessKeySecret, oss.SecurityToken(securityToken))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	bucket, err := client.Bucket(params.Get("bucket").ToString())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	signedURL, err := bucket.SignURL(params.Get("key").ToString(), oss.HTTPPut, 60)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = bucket.PutObjectWithURL(signedURL, file)
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		_ = base.DeleteCache(file.ParentPath, account)
 | 
			
		||||
	}
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _ base.Driver = (*PikPak)(nil)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										2
									
								
								go.mod
								
								
								
								
							| 
						 | 
				
			
			@ -22,6 +22,7 @@ require (
 | 
			
		|||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/XiaoMi/pegasus-go-client v0.0.0-20210427083443-f3b6b08bc4c2 // indirect
 | 
			
		||||
	github.com/aliyun/aliyun-oss-go-sdk v2.2.0+incompatible // indirect
 | 
			
		||||
	github.com/beorn7/perks v1.0.1 // indirect
 | 
			
		||||
	github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b // indirect
 | 
			
		||||
	github.com/cenkalti/backoff/v4 v4.1.0 // indirect
 | 
			
		||||
| 
						 | 
				
			
			@ -65,6 +66,7 @@ require (
 | 
			
		|||
	golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect
 | 
			
		||||
	golang.org/x/net v0.0.0-20211209124913-491a49abca63 // indirect
 | 
			
		||||
	golang.org/x/sys v0.0.0-20211023085530-d6a326fbbf70 // indirect
 | 
			
		||||
	golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect
 | 
			
		||||
	google.golang.org/protobuf v1.27.1 // indirect
 | 
			
		||||
	gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
 | 
			
		||||
	gopkg.in/tomb.v2 v2.0.0-20161208151619-d5d1b5820637 // indirect
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										3
									
								
								go.sum
								
								
								
								
							| 
						 | 
				
			
			@ -20,6 +20,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
 | 
			
		|||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 | 
			
		||||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 | 
			
		||||
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
 | 
			
		||||
github.com/aliyun/aliyun-oss-go-sdk v2.2.0+incompatible h1:ht2+VfbXtNLGhCsnTMc6/N26nSTBK6qdhktjYyjJQkk=
 | 
			
		||||
github.com/aliyun/aliyun-oss-go-sdk v2.2.0+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
 | 
			
		||||
github.com/allegro/bigcache/v2 v2.2.5 h1:mRc8r6GQjuJsmSKQNPsR5jQVXc8IJ1xsW5YXUYMLfqI=
 | 
			
		||||
github.com/allegro/bigcache/v2 v2.2.5/go.mod h1:FppZsIO+IZk7gCuj5FiIDHGygD9xvWQcqg1uIPMb6tY=
 | 
			
		||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
 | 
			
		||||
| 
						 | 
				
			
			@ -638,6 +640,7 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
			
		|||
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
 | 
			
		||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 | 
			
		||||
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
			
		||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
 | 
			
		||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue