summaryrefslogtreecommitdiffstats
path: root/api/file.go
diff options
context:
space:
mode:
authorhmhealey <harrisonmhealey@gmail.com>2015-09-25 11:46:43 -0400
committerhmhealey <harrisonmhealey@gmail.com>2015-09-25 11:46:43 -0400
commit8b63ca03ea3b1f005ee3b8ec516f30fd035d52cb (patch)
tree020180c85353d4a28ce2b46c29bf1113de525c47 /api/file.go
parent6dac2f42a070d066a51352ecbc24c2feb3f0966d (diff)
downloadchat-8b63ca03ea3b1f005ee3b8ec516f30fd035d52cb.tar.gz
chat-8b63ca03ea3b1f005ee3b8ec516f30fd035d52cb.tar.bz2
chat-8b63ca03ea3b1f005ee3b8ec516f30fd035d52cb.zip
Added headers to getFile requests from Microsoft browsers to trigger a download
Diffstat (limited to 'api/file.go')
-rw-r--r--api/file.go14
1 files changed, 14 insertions, 0 deletions
diff --git a/api/file.go b/api/file.go
index 694fc734c..1cb05e81b 100644
--- a/api/file.go
+++ b/api/file.go
@@ -13,6 +13,7 @@ import (
"github.com/gorilla/mux"
"github.com/mattermost/platform/model"
"github.com/mattermost/platform/utils"
+ "github.com/mssola/user_agent"
"github.com/nfnt/resize"
"github.com/rwcarlsen/goexif/exif"
_ "golang.org/x/image/bmp"
@@ -426,6 +427,19 @@ func getFile(c *Context, w http.ResponseWriter, r *http.Request) {
w.Header().Set("Cache-Control", "max-age=2592000, public")
w.Header().Set("Content-Length", strconv.Itoa(len(f)))
w.Header().Set("Content-Type", mime.TypeByExtension(filepath.Ext(filename)))
+
+ // attach extra headers to trigger a download on IE and Edge
+ ua := user_agent.New(r.UserAgent())
+ bname, _ := ua.Browser()
+
+ if bname == "Edge" || bname == "Internet Explorer" {
+ // trim off anything before the final / so we just get the file's name
+ parts := strings.Split(filename, "/")
+
+ w.Header().Set("Content-Type", "application/octet-stream")
+ w.Header().Set("Content-Disposition", "attachment;filename=\""+parts[len(parts)-1]+"\"")
+ }
+
w.Write(f)
}