mirror of
https://github.com/imgproxy/imgproxy.git
synced 2025-09-28 20:43:54 +02:00
Polish swift:// support
This commit is contained in:
@@ -80,23 +80,26 @@ var (
|
||||
CookieBaseURL string
|
||||
|
||||
LocalFileSystemRoot string
|
||||
S3Enabled bool
|
||||
S3Region string
|
||||
S3Endpoint string
|
||||
GCSEnabled bool
|
||||
GCSKey string
|
||||
ABSEnabled bool
|
||||
ABSName string
|
||||
ABSKey string
|
||||
ABSEndpoint string
|
||||
SwiftEnabled bool
|
||||
SwiftUsername string
|
||||
SwiftAPIKey string
|
||||
SwiftAuthURL string
|
||||
SwiftDomain string
|
||||
SwiftTenant string
|
||||
SwiftAuthVersion int
|
||||
|
||||
S3Enabled bool
|
||||
S3Region string
|
||||
S3Endpoint string
|
||||
|
||||
GCSEnabled bool
|
||||
GCSKey string
|
||||
|
||||
ABSEnabled bool
|
||||
ABSName string
|
||||
ABSKey string
|
||||
ABSEndpoint string
|
||||
|
||||
SwiftEnabled bool
|
||||
SwiftUsername string
|
||||
SwiftAPIKey string
|
||||
SwiftAuthURL string
|
||||
SwiftDomain string
|
||||
SwiftTenant string
|
||||
SwiftAuthVersion int
|
||||
SwiftConnectTimeoutSeconds int
|
||||
SwiftTimeoutSeconds int
|
||||
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
imgproxy can process images from OpenStack Object Storage, also known as Swift. To use this feature, do the following:
|
||||
|
||||
1. Set `IMGPROXY_USE_SWIFT` environment variable to `true`
|
||||
1. Set the `IMGPROXY_USE_SWIFT` environment variable to `true`
|
||||
2. Configure Swift authentication with the following environment variables
|
||||
* `IMGPROXY_SWIFT_USERNAME`: the username for Swift API access. Default: blank
|
||||
* `IMGPROXY_SWIFT_API_KEY`: the API key for Swift API access. Default: blank
|
||||
@@ -11,6 +11,4 @@ imgproxy can process images from OpenStack Object Storage, also known as Swift.
|
||||
* `IMGPROXY_SWIFT_TENANT`: the tenant name (optional, v2 auth only). Default: blank
|
||||
* `IMGPROXY_SWIFT_DOMAIN`: the Swift domain name (optional, v3 auth only): Default: blank
|
||||
|
||||
3. Use `swift://%{container}/%{object_path}` as the source image URL. e.g. an original object storage URL in the format of
|
||||
`/v1/{account}/{container}/{object_path}` such as `http://127.0.0.1:8080/v1/AUTH_test/images/flowers/rose.jpg` should
|
||||
be converted to `swift://images/flowers/rose.jpg`.
|
||||
3. Use `swift://%{container}/%{object_path}` as the source image URL, e.g. an original object storage URL in the format of `/v1/{account}/{container}/{object_path}`, such as `http://127.0.0.1:8080/v1/AUTH_test/images/flowers/rose.jpg`, should be converted to `swift://images/flowers/rose.jpg`.
|
||||
|
@@ -7,8 +7,9 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/imgproxy/imgproxy/v3/config"
|
||||
"github.com/ncw/swift/v2"
|
||||
|
||||
"github.com/imgproxy/imgproxy/v3/config"
|
||||
)
|
||||
|
||||
type transport struct {
|
||||
@@ -43,9 +44,7 @@ func (t transport) RoundTrip(req *http.Request) (resp *http.Response, err error)
|
||||
container := req.URL.Host
|
||||
objectName := strings.TrimPrefix(req.URL.Path, "/")
|
||||
|
||||
headers := make(swift.Headers)
|
||||
|
||||
object, headers, err := t.con.ObjectOpen(req.Context(), container, objectName, false, headers)
|
||||
object, objectHeaders, err := t.con.ObjectOpen(req.Context(), container, objectName, false, make(swift.Headers))
|
||||
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error opening object: %v", err)
|
||||
@@ -54,11 +53,12 @@ func (t transport) RoundTrip(req *http.Request) (resp *http.Response, err error)
|
||||
header := make(http.Header)
|
||||
|
||||
if config.ETagEnabled {
|
||||
if etag, ok := headers["Etag"]; ok {
|
||||
if etag, ok := objectHeaders["Etag"]; ok {
|
||||
header.Set("ETag", etag)
|
||||
|
||||
if len(etag) > 0 && etag == req.Header.Get("If-None-Match") {
|
||||
object.Close()
|
||||
|
||||
return &http.Response{
|
||||
StatusCode: http.StatusNotModified,
|
||||
Proto: "HTTP/1.0",
|
||||
@@ -74,6 +74,10 @@ func (t transport) RoundTrip(req *http.Request) (resp *http.Response, err error)
|
||||
}
|
||||
}
|
||||
|
||||
for k, v := range objectHeaders {
|
||||
header.Set(k, v)
|
||||
}
|
||||
|
||||
return &http.Response{
|
||||
Status: "200 OK",
|
||||
StatusCode: 200,
|
||||
|
Reference in New Issue
Block a user