You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@answer.apache.org by li...@apache.org on 2025/04/23 09:47:36 UTC

(answer-plugins) 01/03: feat(storage): support to set ACL_PUBLIC_READ ENV

This is an automated email from the ASF dual-hosted git repository.

linkinstar pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/answer-plugins.git

commit 49fbb36573e9074c2f1c8c57d4cbfd51ac9be269
Author: Luffy <52...@qq52o.cn>
AuthorDate: Wed Apr 23 15:50:41 2025 +0800

    feat(storage): support to set ACL_PUBLIC_READ ENV
---
 storage-aliyunoss/aliyunoss.go         | 12 +++++++++++-
 storage-aliyunoss/info.yaml            |  2 +-
 storage-tencentyuncos/info.yaml        |  2 +-
 storage-tencentyuncos/tencentyuncos.go | 16 +++++++++++++++-
 4 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/storage-aliyunoss/aliyunoss.go b/storage-aliyunoss/aliyunoss.go
index 153d177..4bb29e0 100644
--- a/storage-aliyunoss/aliyunoss.go
+++ b/storage-aliyunoss/aliyunoss.go
@@ -25,6 +25,7 @@ import (
 	"encoding/hex"
 	"encoding/json"
 	"fmt"
+	"os"
 	"path/filepath"
 	"strings"
 	"time"
@@ -40,6 +41,11 @@ import (
 //go:embed  info.yaml
 var Info embed.FS
 
+var (
+	// aclPublicRead is the environment variable for some special platforms such as digital ocean
+	aclPublicRead = os.Getenv("ACL_PUBLIC_READ")
+)
+
 type Storage struct {
 	Config *StorageConfig
 }
@@ -121,7 +127,11 @@ func (s *Storage) UploadFile(ctx *plugin.GinContext, condition plugin.UploadFile
 		ObjectKey: objectKey,
 		Reader:    open,
 	}
-	respBody, err := bucket.DoPutObject(request, nil)
+	var options []oss.Option
+	if len(aclPublicRead) > 0 {
+		options = append(options, oss.ObjectACL(oss.ACLPublicRead))
+	}
+	respBody, err := bucket.DoPutObject(request, options)
 	if err != nil {
 		resp.OriginalError = fmt.Errorf("upload file failed: %v", err)
 		resp.DisplayErrorMsg = plugin.MakeTranslator(i18n.ErrUploadFileFailed)
diff --git a/storage-aliyunoss/info.yaml b/storage-aliyunoss/info.yaml
index cd95814..29a5109 100644
--- a/storage-aliyunoss/info.yaml
+++ b/storage-aliyunoss/info.yaml
@@ -17,6 +17,6 @@
 
 slug_name: aliyunoss_storage
 type: storage
-version: 1.2.12
+version: 1.2.13
 author: answerdev
 link: https://github.com/apache/answer-plugins/tree/main/storage-aliyunoss
diff --git a/storage-tencentyuncos/info.yaml b/storage-tencentyuncos/info.yaml
index 47cc21c..8f97136 100644
--- a/storage-tencentyuncos/info.yaml
+++ b/storage-tencentyuncos/info.yaml
@@ -17,6 +17,6 @@
 
 slug_name: tencentyuncos_storage
 type: storage
-version: 1.0.3
+version: 1.0.4
 author: Luffy
 link: https://github.com/apache/answer-plugins/tree/main/storage-tencentyuncos
diff --git a/storage-tencentyuncos/tencentyuncos.go b/storage-tencentyuncos/tencentyuncos.go
index ec46687..97a69b3 100644
--- a/storage-tencentyuncos/tencentyuncos.go
+++ b/storage-tencentyuncos/tencentyuncos.go
@@ -27,6 +27,7 @@ import (
 	"fmt"
 	"net/http"
 	"net/url"
+	"os"
 	"path/filepath"
 	"strings"
 	"time"
@@ -42,6 +43,11 @@ import (
 //go:embed  info.yaml
 var Info embed.FS
 
+var (
+	// aclPublicRead is the environment variable for some special platforms such as digital ocean
+	aclPublicRead = os.Getenv("ACL_PUBLIC_READ")
+)
+
 type Storage struct {
 	Config *StorageConfig
 }
@@ -122,7 +128,15 @@ func (s *Storage) UploadFile(ctx *plugin.GinContext, condition plugin.UploadFile
 	defer openFile.Close()
 
 	objectKey := s.createObjectKey(file.Filename, condition.Source)
-	_, err = client.Object.Put(ctx, objectKey, openFile, nil)
+	var options *cos.ObjectPutOptions
+	if len(aclPublicRead) > 0 {
+		options = &cos.ObjectPutOptions{
+			ACLHeaderOptions: &cos.ACLHeaderOptions{
+				XCosACL: "public-read",
+			},
+		}
+	}
+	_, err = client.Object.Put(ctx, objectKey, openFile, options)
 	if err != nil {
 		resp.OriginalError = fmt.Errorf("upload file failed: %v", err)
 		resp.DisplayErrorMsg = plugin.MakeTranslator(i18n.ErrUploadFileFailed)