aboutsummaryrefslogtreecommitdiff
path: root/mediaapi/routing/download.go
diff options
context:
space:
mode:
Diffstat (limited to 'mediaapi/routing/download.go')
-rw-r--r--mediaapi/routing/download.go10
1 files changed, 9 insertions, 1 deletions
diff --git a/mediaapi/routing/download.go b/mediaapi/routing/download.go
index 1a025f6f..3ce4ba39 100644
--- a/mediaapi/routing/download.go
+++ b/mediaapi/routing/download.go
@@ -21,6 +21,7 @@ import (
"io"
"mime"
"net/http"
+ "net/url"
"os"
"path/filepath"
"regexp"
@@ -302,7 +303,14 @@ func (r *downloadRequest) respondFromLocalFile(
responseMetadata = r.MediaMetadata
if len(responseMetadata.UploadName) > 0 {
- w.Header().Set("Content-Disposition", fmt.Sprintf(`inline; filename*=utf-8"%s"`, responseMetadata.UploadName))
+ uploadName, err := url.PathUnescape(string(responseMetadata.UploadName))
+ if err != nil {
+ return nil, fmt.Errorf("url.PathUnescape: %w", err)
+ }
+ w.Header().Set("Content-Disposition", fmt.Sprintf(
+ `inline; filename=utf-8"%s"`,
+ strings.ReplaceAll(uploadName, `"`, `\"`), // escape quote marks only, as per RFC6266
+ ))
}
}