From bf398d2266a32229d9b63ab95de7afbf2e7a4227 Mon Sep 17 00:00:00 2001 From: Konstantin Lebedev <9497591+kmlebedev@users.noreply.github.com> Date: Sun, 31 Mar 2024 20:50:30 +0500 Subject: [PATCH] fix volume Encode --- weed/operation/upload_content.go | 5 ++--- weed/s3api/s3api_object_handlers_postpolicy.go | 2 +- weed/server/filer_server_handlers_write_autochunk.go | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/weed/operation/upload_content.go b/weed/operation/upload_content.go index b48d73deb..f644265ca 100644 --- a/weed/operation/upload_content.go +++ b/weed/operation/upload_content.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/rclone/rclone/lib/encoder" "io" "mime" "mime/multipart" @@ -128,8 +129,6 @@ func UploadWithRetry(filerClient filer_pb.FilerClient, assignRequest *filer_pb.A return } -var fileNameEscaper = strings.NewReplacer(`\`, `\\`, `"`, `\"`, "\n", "") - // Upload sends a POST request to a volume server to upload the content with adjustable compression level func UploadData(data []byte, option *UploadOption) (uploadResult *UploadResult, err error) { uploadResult, err = retriedUploadData(data, option) @@ -279,7 +278,7 @@ func upload_content(fillBufferFunction func(w io.Writer) error, originalDataSize defer PutBuffer(buf) body_writer := multipart.NewWriter(buf) h := make(textproto.MIMEHeader) - filename := fileNameEscaper.Replace(option.Filename) + filename := encoder.Standard.Encode(option.Filename) h.Set("Content-Disposition", fmt.Sprintf(`form-data; name="file"; filename="%s"`, filename)) h.Set("Idempotency-Key", option.UploadUrl) if option.MimeType == "" { diff --git a/weed/s3api/s3api_object_handlers_postpolicy.go b/weed/s3api/s3api_object_handlers_postpolicy.go index cd80e0ad3..d7915cde1 100644 --- a/weed/s3api/s3api_object_handlers_postpolicy.go +++ b/weed/s3api/s3api_object_handlers_postpolicy.go @@ -126,7 +126,7 @@ func (s3a *S3ApiServer) PostPolicyBucketHandler(w http.ResponseWriter, r *http.R // Add s3 postpolicy support header for k, _ := range formValues { - if k == "Cache-Control" || k == "Expires" || k == "Content-Disposition" { + if k == "Cache-Control" || k == "Expires" || k == "Content-Disposition" || k == "Content-Language" { r.Header.Set(k, formValues.Get(k)) continue } diff --git a/weed/server/filer_server_handlers_write_autochunk.go b/weed/server/filer_server_handlers_write_autochunk.go index f4428be61..c0192f39e 100644 --- a/weed/server/filer_server_handlers_write_autochunk.go +++ b/weed/server/filer_server_handlers_write_autochunk.go @@ -257,7 +257,7 @@ func (fs *FilerServer) saveMetaData(ctx context.Context, r *http.Request, fileNa for k, v := range r.Header { if len(v) > 0 && len(v[0]) > 0 { - if strings.HasPrefix(k, needle.PairNamePrefix) || k == "Cache-Control" || k == "Expires" || k == "Content-Disposition" { + if strings.HasPrefix(k, needle.PairNamePrefix) || k == "Cache-Control" || k == "Expires" || k == "Content-Disposition" || k == "Content-Language" { entry.Extended[k] = []byte(v[0]) } if k == "Response-Content-Disposition" {