Skip to content

Commit 26000cc

Browse files
YangSen-qnYangSen-qn
andauthored
fix: form upload, host not effective (#166)
* fix: form upload, Specified domain name not effective * fix: form upload, Specified domain name not effective --------- Co-authored-by: YangSen-qn <[email protected]>
1 parent 018d6f3 commit 26000cc

File tree

7 files changed

+186
-93
lines changed

7 files changed

+186
-93
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
# Changelog
2+
## 7.25.4
3+
4+
* 修复
5+
* 处理表单上传指定域名不生效问题
6+
7+
28
## 7.25.3
39

410
* 修复

storage/form_upload_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,45 @@ func TestFormUploadPutFileWithoutExtra(t *testing.T) {
5151
t.Logf("Key: %s, Hash:%s", putRet.Key, putRet.Hash)
5252
}
5353

54+
func TestFormUploaderWithInvalidUpHost(t *testing.T) {
55+
var putRet PutRet
56+
ctx := context.TODO()
57+
putPolicy := PutPolicy{
58+
Scope: testBucket,
59+
DeleteAfterDays: 7,
60+
}
61+
62+
// prepare file for test uploading
63+
testLocalFile, err := ioutil.TempFile("", "TestFormUploadPutFile")
64+
if err != nil {
65+
t.Fatalf("ioutil.TempFile file failed, err: %v", err)
66+
}
67+
defer os.Remove(testLocalFile.Name())
68+
69+
r := rand.New(rand.NewSource(time.Now().UnixNano()))
70+
_, err = io.CopyN(testLocalFile, r, 1024)
71+
if err != nil {
72+
t.Fatalf("ioutil.TempFile file write failed, err: %v", err)
73+
}
74+
_, err = testLocalFile.Seek(0, io.SeekCurrent)
75+
if err != nil {
76+
t.Fatalf("ioutil.TempFile file seek failed, err: %v", err)
77+
}
78+
79+
upToken := putPolicy.UploadToken(mac)
80+
testKey := fmt.Sprintf("testPutFileWithoutExtra_%d", r.Int())
81+
82+
err = formUploader.PutFile(ctx, &putRet, upToken, testKey, testLocalFile.Name(), &PutExtra{
83+
UpHost: "mock.upload.io",
84+
})
85+
if err == nil {
86+
t.Fatalf("TestFormUploaderWithInvalidUpHost should error, %s", err)
87+
}
88+
if !strings.Contains(err.Error(), "lookup mock.upload.io: no such host") {
89+
t.Fatalf("TestFormUploaderWithInvalidUpHost should use mock host, %s", err)
90+
}
91+
}
92+
5493
func TestFormUploadPutFile(t *testing.T) {
5594
var putRet PutRet
5695
ctx := context.TODO()

storage/resume_uploader_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,35 @@ func TestResumeUploadPutFile(t *testing.T) {
4747
t.Logf("Key: %s, Hash:%s", putRet.Key, putRet.Hash)
4848
}
4949

50+
func TestResumeUploadWithInvalidUpHost(t *testing.T) {
51+
var putRet PutRet
52+
ctx := context.TODO()
53+
putPolicy := PutPolicy{
54+
Scope: testBucket,
55+
DeleteAfterDays: 7,
56+
}
57+
upToken := putPolicy.UploadToken(mac)
58+
r := rand.New(rand.NewSource(time.Now().UnixNano()))
59+
testKey := fmt.Sprintf("testRPutFileKey_%d", r.Int())
60+
61+
// prepare file for test uploading
62+
testLocalFile, err := ioutil.TempFile("", "TestResumeUploadPutFile")
63+
if err != nil {
64+
t.Fatalf("ioutil.TempFile file failed, err: %v", err)
65+
}
66+
defer os.Remove(testLocalFile.Name())
67+
68+
err = resumeUploader.PutFile(ctx, &putRet, upToken, testKey, testLocalFile.Name(), &RputExtra{
69+
UpHost: "mock.upload.io",
70+
})
71+
if err == nil {
72+
t.Fatalf("TestFormUploaderWithInvalidUpHost should error, %s", err)
73+
}
74+
if !strings.Contains(err.Error(), "lookup mock.upload.io: no such host") {
75+
t.Fatalf("TestFormUploaderWithInvalidUpHost should use mock host, %s", err)
76+
}
77+
}
78+
5079
func TestPutWithoutSize(t *testing.T) {
5180
var putRet PutRet
5281
putPolicy := PutPolicy{

storagev2/http_client/http_client.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,14 @@ type (
146146
Method string
147147

148148
// 请求服务名
149+
// 注:应该是考虑同一个 API 有多个服务提供
149150
ServiceNames []region.ServiceName
150151

151152
// 服务地址提供者
152153
Endpoints region.EndpointsProvider
153154

154155
// 区域提供者
156+
// 注:如果有多个只会使用第一个
155157
Region region.RegionsProvider
156158

157159
// 请求路径

storagev2/region/region.go

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -122,56 +122,56 @@ func makeHost(domain string, useHttps bool) string {
122122
}
123123
}
124124

125-
func (region *Region) GetRegions(context.Context) ([]*Region, error) {
126-
return []*Region{region}, nil
125+
func (r *Region) GetRegions(context.Context) ([]*Region, error) {
126+
return []*Region{r}, nil
127127
}
128128

129-
func (region *Region) Endpoints(serviceNames []ServiceName) (Endpoints, error) {
129+
func (r *Region) Endpoints(serviceNames []ServiceName) (Endpoints, error) {
130130
var endpoint Endpoints
131131
for _, serviceName := range serviceNames {
132132
switch serviceName {
133133
case ServiceUp:
134-
endpoint = endpoint.Join(region.Up)
134+
endpoint = endpoint.Join(r.Up)
135135
case ServiceIo:
136-
endpoint = endpoint.Join(region.Io)
136+
endpoint = endpoint.Join(r.Io)
137137
case ServiceIoSrc:
138-
endpoint = endpoint.Join(region.IoSrc)
138+
endpoint = endpoint.Join(r.IoSrc)
139139
case ServiceRs:
140-
endpoint = endpoint.Join(region.Rs)
140+
endpoint = endpoint.Join(r.Rs)
141141
case ServiceRsf:
142-
endpoint = endpoint.Join(region.Rsf)
142+
endpoint = endpoint.Join(r.Rsf)
143143
case ServiceApi:
144-
endpoint = endpoint.Join(region.Api)
144+
endpoint = endpoint.Join(r.Api)
145145
case ServiceBucket:
146-
endpoint = endpoint.Join(region.Bucket)
146+
endpoint = endpoint.Join(r.Bucket)
147147
default:
148148
return endpoint, ErrUnrecognizedServiceName
149149
}
150150
}
151151
return endpoint, nil
152152
}
153153

154-
func (region *Region) EndpointsIter(serviceNames []ServiceName) (*EndpointsIter, error) {
155-
endpoints, err := region.Endpoints(serviceNames)
154+
func (r *Region) EndpointsIter(serviceNames []ServiceName) (*EndpointsIter, error) {
155+
endpoints, err := r.Endpoints(serviceNames)
156156
if err != nil {
157157
return nil, err
158158
}
159159
return endpoints.Iter(), nil
160160
}
161161

162-
func (left *Region) IsEqual(right *Region) bool {
163-
return left.RegionID == right.RegionID &&
164-
left.Up.IsEqual(right.Up) &&
165-
left.Io.IsEqual(right.Io) &&
166-
left.IoSrc.IsEqual(right.IoSrc) &&
167-
left.Rs.IsEqual(right.Rs) &&
168-
left.Rsf.IsEqual(right.Rsf) &&
169-
left.Api.IsEqual(right.Api) &&
170-
left.Bucket.IsEqual(right.Bucket)
162+
func (r *Region) IsEqual(right *Region) bool {
163+
return r.RegionID == right.RegionID &&
164+
r.Up.IsEqual(right.Up) &&
165+
r.Io.IsEqual(right.Io) &&
166+
r.IoSrc.IsEqual(right.IoSrc) &&
167+
r.Rs.IsEqual(right.Rs) &&
168+
r.Rsf.IsEqual(right.Rsf) &&
169+
r.Api.IsEqual(right.Api) &&
170+
r.Bucket.IsEqual(right.Bucket)
171171
}
172172

173-
func (left Endpoints) Join(rights ...Endpoints) Endpoints {
174-
newEndpoint := left
173+
func (ep Endpoints) Join(rights ...Endpoints) Endpoints {
174+
newEndpoint := ep
175175
for _, right := range rights {
176176
newEndpoint.Accelerated = append(newEndpoint.Accelerated, right.Accelerated...)
177177
newEndpoint.Preferred = append(newEndpoint.Preferred, right.Preferred...)
@@ -181,68 +181,68 @@ func (left Endpoints) Join(rights ...Endpoints) Endpoints {
181181
return newEndpoint
182182
}
183183

184-
func (left Endpoints) IsEqual(right Endpoints) bool {
185-
return reflect.DeepEqual(left.Accelerated, right.Accelerated) &&
186-
reflect.DeepEqual(left.Preferred, right.Preferred) &&
187-
reflect.DeepEqual(left.Alternative, right.Alternative)
184+
func (ep Endpoints) IsEqual(right Endpoints) bool {
185+
return reflect.DeepEqual(ep.Accelerated, right.Accelerated) &&
186+
reflect.DeepEqual(ep.Preferred, right.Preferred) &&
187+
reflect.DeepEqual(ep.Alternative, right.Alternative)
188188

189189
}
190190

191-
func (hosts Endpoints) Iter() *EndpointsIter {
192-
return &EndpointsIter{endpoints: hosts}
191+
func (ep Endpoints) Iter() *EndpointsIter {
192+
return &EndpointsIter{endpoints: ep}
193193
}
194194

195-
func (endpoints Endpoints) HostsLength() int {
196-
return len(endpoints.Accelerated) + len(endpoints.Preferred) + len(endpoints.Alternative)
195+
func (ep Endpoints) HostsLength() int {
196+
return len(ep.Accelerated) + len(ep.Preferred) + len(ep.Alternative)
197197
}
198198

199-
func (endpoints Endpoints) IsEmpty() bool {
200-
return len(endpoints.Accelerated) == 0 && len(endpoints.Preferred) == 0 && len(endpoints.Alternative) == 0
199+
func (ep Endpoints) IsEmpty() bool {
200+
return len(ep.Accelerated) == 0 && len(ep.Preferred) == 0 && len(ep.Alternative) == 0
201201
}
202202

203-
func (endpoints Endpoints) firstUrl(useHttps bool) string {
204-
for _, accelerated := range endpoints.Accelerated {
203+
func (ep Endpoints) firstUrl(useHttps bool) string {
204+
for _, accelerated := range ep.Accelerated {
205205
return makeUrlFromHost(accelerated, useHttps)
206206
}
207-
for _, preferred := range endpoints.Preferred {
207+
for _, preferred := range ep.Preferred {
208208
return makeUrlFromHost(preferred, useHttps)
209209
}
210-
for _, alternative := range endpoints.Alternative {
210+
for _, alternative := range ep.Alternative {
211211
return makeUrlFromHost(alternative, useHttps)
212212
}
213213
return ""
214214
}
215215

216-
func (endpoints Endpoints) GetEndpoints(context.Context) (Endpoints, error) {
217-
return endpoints, nil
216+
func (ep Endpoints) GetEndpoints(context.Context) (Endpoints, error) {
217+
return ep, nil
218218
}
219219

220-
func (endpoints Endpoints) allUrls(useHttps bool) []string {
221-
allHosts := make([]string, 0, len(endpoints.Accelerated)+len(endpoints.Preferred)+len(endpoints.Alternative))
222-
for _, accelerated := range endpoints.Accelerated {
220+
func (ep Endpoints) allUrls(useHttps bool) []string {
221+
allHosts := make([]string, 0, len(ep.Accelerated)+len(ep.Preferred)+len(ep.Alternative))
222+
for _, accelerated := range ep.Accelerated {
223223
allHosts = append(allHosts, makeUrlFromHost(accelerated, useHttps))
224224
}
225-
for _, preferred := range endpoints.Preferred {
225+
for _, preferred := range ep.Preferred {
226226
allHosts = append(allHosts, makeUrlFromHost(preferred, useHttps))
227227
}
228-
for _, alternative := range endpoints.Alternative {
228+
for _, alternative := range ep.Alternative {
229229
allHosts = append(allHosts, makeUrlFromHost(alternative, useHttps))
230230
}
231231
return allHosts
232232
}
233233

234-
func (endpoints Endpoints) ToHostProvider() hostprovider.HostProvider {
234+
func (ep Endpoints) ToHostProvider() hostprovider.HostProvider {
235235
return &endpointsHostProvider{
236-
iter: endpoints.Iter(),
236+
iter: ep.Iter(),
237237
freezer: freezer.New(),
238238
}
239239
}
240240

241-
func (endpoints Endpoints) Clone() Endpoints {
241+
func (ep Endpoints) Clone() Endpoints {
242242
return Endpoints{
243-
Preferred: append([]string{}, endpoints.Preferred...),
244-
Alternative: append([]string{}, endpoints.Alternative...),
245-
Accelerated: append([]string{}, endpoints.Accelerated...),
243+
Preferred: append([]string{}, ep.Preferred...),
244+
Alternative: append([]string{}, ep.Alternative...),
245+
Accelerated: append([]string{}, ep.Accelerated...),
246246
}
247247
}
248248

storagev2/uploader/upload_manager.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,11 @@ func NewUploadManager(options *UploadManagerOptions) *UploadManager {
101101
func (uploadManager *UploadManager) UploadDirectory(ctx context.Context, directoryPath string, directoryOptions *DirectoryOptions) error {
102102
if directoryOptions == nil {
103103
directoryOptions = &DirectoryOptions{}
104+
} else {
105+
tmp := *directoryOptions
106+
directoryOptions = &tmp
104107
}
108+
105109
objectConcurrency := directoryOptions.ObjectConcurrency
106110
if objectConcurrency == 0 {
107111
objectConcurrency = 4
@@ -191,6 +195,9 @@ func (uploadManager *UploadManager) UploadDirectory(ctx context.Context, directo
191195
func (uploadManager *UploadManager) UploadFile(ctx context.Context, path string, objectOptions *ObjectOptions, returnValue interface{}) error {
192196
if objectOptions == nil {
193197
objectOptions = &ObjectOptions{}
198+
} else {
199+
tmp := *objectOptions
200+
objectOptions = &tmp
194201
}
195202

196203
fileInfo, err := os.Stat(path)
@@ -214,6 +221,9 @@ func (uploadManager *UploadManager) UploadReader(ctx context.Context, reader io.
214221

215222
if objectOptions == nil {
216223
objectOptions = &ObjectOptions{}
224+
} else {
225+
tmp := *objectOptions
226+
objectOptions = &tmp
217227
}
218228

219229
if rscs, ok := reader.(io.ReadSeeker); ok && canSeekReally(rscs) {

0 commit comments

Comments
 (0)