From 37e78cb39beea92d910dabb807135d1189205205 Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Mon, 13 Jan 2020 10:03:45 +0800 Subject: [PATCH] Feat: generate upload server url from policy --- models/policy.go | 20 ++++++++++++++++++++ models/policy_test.go | 23 +++++++++++++++++++++++ pkg/serializer/user.go | 2 +- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/models/policy.go b/models/policy.go index a759fcc..b4ae9dd 100644 --- a/models/policy.go +++ b/models/policy.go @@ -6,6 +6,7 @@ import ( "github.com/HFO4/cloudreve/pkg/cache" "github.com/HFO4/cloudreve/pkg/util" "github.com/jinzhu/gorm" + "net/url" "path" "strconv" "time" @@ -147,3 +148,22 @@ func (policy *Policy) GenerateFileName(uid uint, origin string) string { func (policy *Policy) IsDirectlyPreview() bool { return policy.Type == "local" } + +// GetUploadURL 获取文件上传服务API地址 +func (policy *Policy) GetUploadURL() string { + server, err := url.Parse(policy.Server) + if err != nil { + return policy.Server + } + + var controller *url.URL + switch policy.Type { + case "local": + controller, _ = url.Parse("/api/v3/file/upload") + case "remote": + controller, _ = url.Parse("/api/v3/slave/upload") + default: + controller, _ = url.Parse("") + } + return server.ResolveReference(controller).String() +} diff --git a/models/policy_test.go b/models/policy_test.go index 584fe2f..7717bb4 100644 --- a/models/policy_test.go +++ b/models/policy_test.go @@ -141,3 +141,26 @@ func TestPolicy_IsDirectlyPreview(t *testing.T) { policy.Type = "remote" asserts.False(policy.IsDirectlyPreview()) } + +func TestPolicy_GetUploadURL(t *testing.T) { + asserts := assert.New(t) + + // 本地 + { + policy := Policy{Type: "local", Server: "http://127.0.0.1"} + asserts.Equal("http://127.0.0.1/api/v3/file/upload", policy.GetUploadURL()) + } + + // 远程 + { + policy := Policy{Type: "remote", Server: "http://127.0.0.1"} + asserts.Equal("http://127.0.0.1/api/v3/slave/upload", policy.GetUploadURL()) + } + + // 未知 + { + policy := Policy{Type: "unknown", Server: "http://127.0.0.1"} + asserts.Equal("http://127.0.0.1", policy.GetUploadURL()) + } + +} diff --git a/pkg/serializer/user.go b/pkg/serializer/user.go index 687e646..0086d1c 100644 --- a/pkg/serializer/user.go +++ b/pkg/serializer/user.go @@ -64,7 +64,7 @@ func BuildUser(user model.User) User { SaveType: user.Policy.Type, MaxSize: fmt.Sprintf("%.2fmb", float64(user.Policy.MaxSize)/(1024*1024)), AllowedType: user.Policy.OptionsSerialized.FileType, - UploadURL: user.Policy.Server, + UploadURL: user.Policy.GetUploadURL(), AllowGetSource: user.Policy.IsOriginLinkEnable, }, Group: group{