1
0
mirror of https://github.com/imgproxy/imgproxy.git synced 2025-02-02 11:34:20 +02:00

Version IDs for S3 and generations for GCS

This commit is contained in:
DarthSim 2018-11-13 20:04:04 +06:00
parent fc4a09f196
commit 00b690e93d
4 changed files with 23 additions and 0 deletions

View File

@ -4,3 +4,9 @@ imgproxy can process images from Google Cloud Storage buckets. To use this featu
1. Set `IMGPROXY_GCS_KEY` environment variable to the content of Google Cloud JSON key. Get more info about JSON keys: [https://cloud.google.com/iam/docs/creating-managing-service-account-keys](https://cloud.google.com/iam/docs/creating-managing-service-account-keys);
2. Use `gs://%bucket_name/%file_key` as the source image URL.
If you need to specify generation of the source object, you can use query string of the source URL:
```
gs://%bucket_name/%file_key?%generation
```

View File

@ -8,6 +8,12 @@ imgproxy can process images from S3 buckets. To use this feature, do the followi
4. _(optional)_ Specify S3 endpoint with `IMGPROXY_S3_ENDPOINT`;
5. Use `s3://%bucket_name/%file_key` as the source image URL.
If you need to specify version of the source object, you can use query string of the source URL:
```
s3://%bucket_name/%file_key?%version_id
```
### Setup credentials
There are three ways to specify your AWS credentials. The credentials need to have read rights for all of the buckets given in the source URLs.

View File

@ -4,6 +4,7 @@ import (
"context"
"log"
"net/http"
"strconv"
"strings"
"cloud.google.com/go/storage"
@ -27,6 +28,11 @@ func newGCSTransport() http.RoundTripper {
func (t gcsTransport) RoundTrip(req *http.Request) (resp *http.Response, err error) {
bkt := t.client.Bucket(req.URL.Host)
obj := bkt.Object(strings.TrimPrefix(req.URL.Path, "/"))
if g, err := strconv.ParseInt(req.URL.RawQuery, 10, 64); err == nil && g > 0 {
obj = obj.Generation(g)
}
reader, err := obj.NewReader(context.Background())
if err != nil {

View File

@ -33,6 +33,11 @@ func (t s3Transport) RoundTrip(req *http.Request) (resp *http.Response, err erro
Bucket: aws.String(req.URL.Host),
Key: aws.String(req.URL.Path),
}
if len(req.URL.RawQuery) > 0 {
input.VersionId = aws.String(req.URL.RawQuery)
}
s3req, _ := t.svc.GetObjectRequest(input)
s3err := s3req.Send()