mirror of
https://github.com/OpenListTeam/OpenList.git
synced 2025-07-18 17:38:07 +08:00
fix(s3): correctly handle URL when RemoveBucket
is enabled (#497)
* fix(s3): correctly handle URL when RemoveBucket is enabled * fix(s3): handle errors
This commit is contained in:
@ -97,7 +97,10 @@ func (d *S3) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*mo
|
|||||||
input.ResponseContentDisposition = &disposition
|
input.ResponseContentDisposition = &disposition
|
||||||
}
|
}
|
||||||
|
|
||||||
req, _ := d.linkClient.GetObjectRequest(input)
|
req, reqErr := d.linkClient.GetObjectRequest(input)
|
||||||
|
if reqErr != nil {
|
||||||
|
return nil, fmt.Errorf("failed to create GetObject request: %w", reqErr)
|
||||||
|
}
|
||||||
var link model.Link
|
var link model.Link
|
||||||
var err error
|
var err error
|
||||||
if d.CustomHost != "" {
|
if d.CustomHost != "" {
|
||||||
@ -107,8 +110,30 @@ func (d *S3) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*mo
|
|||||||
err = req.Build()
|
err = req.Build()
|
||||||
link.URL = req.HTTPRequest.URL.String()
|
link.URL = req.HTTPRequest.URL.String()
|
||||||
}
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to generate link URL: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
if d.RemoveBucket {
|
if d.RemoveBucket {
|
||||||
link.URL = strings.Replace(link.URL, "/"+d.Bucket, "", 1)
|
parsedURL, parseErr := url.Parse(link.URL)
|
||||||
|
if parseErr != nil {
|
||||||
|
log.Errorf("Failed to parse URL for bucket removal: %v, URL: %s", parseErr, link.URL)
|
||||||
|
return nil, fmt.Errorf("failed to parse URL for bucket removal: %w", parseErr)
|
||||||
|
}
|
||||||
|
|
||||||
|
path := parsedURL.Path
|
||||||
|
bucketPrefix := "/" + d.Bucket
|
||||||
|
if strings.HasPrefix(path, bucketPrefix) {
|
||||||
|
path = strings.TrimPrefix(path, bucketPrefix)
|
||||||
|
if path == "" {
|
||||||
|
path = "/"
|
||||||
|
}
|
||||||
|
parsedURL.Path = path
|
||||||
|
link.URL = parsedURL.String()
|
||||||
|
log.Debugf("Removed bucket '%s' from URL path: %s -> %s", d.Bucket, bucketPrefix, path)
|
||||||
|
} else {
|
||||||
|
log.Warnf("URL path does not contain expected bucket prefix '%s': %s", bucketPrefix, path)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if common.ShouldProxy(d, fileName) {
|
if common.ShouldProxy(d, fileName) {
|
||||||
|
Reference in New Issue
Block a user