Skip to content

Commit d66bd0c

Browse files
committed
feat: add ?download to file in download mode
1 parent 7de2dc9 commit d66bd0c

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

src/serverHandler/content.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package serverHandler
33
import (
44
"../util"
55
"net/http"
6+
"net/url"
67
"os"
78
"strconv"
89
"time"
@@ -16,7 +17,7 @@ func (h *handler) content(w http.ResponseWriter, r *http.Request, data *response
1617
header := w.Header()
1718
header.Set("X-Content-Type-Options", "nosniff")
1819
if data.IsDownload {
19-
header.Set("Content-Disposition", "attachment; filename*=UTF-8''"+data.ItemName)
20+
header.Set("Content-Disposition", "attachment; filename*=UTF-8''"+url.PathEscape(data.ItemName))
2021
}
2122

2223
item := data.Item

src/serverHandler/page.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ const TypeFile = template.HTML("file")
1616
func updateSubItemsHtml(data *responseData) {
1717
length := len(data.SubItems)
1818
data.SubItemsHtml = make([]*itemHtml, length)
19-
dirQueryString := data.Context.QueryString()
2019

2120
for i, info := range data.SubItems {
2221
name := info.Name()
@@ -30,11 +29,11 @@ func updateSubItemsHtml(data *responseData) {
3029
if info.IsDir() {
3130
displayName = tplutil.FormatFilename(name) + "/"
3231
typ = TypeDir
33-
url = data.SubItemPrefix + urlEscapedName + "/" + dirQueryString
32+
url = data.SubItemPrefix + urlEscapedName + "/" + data.Context.QueryString()
3433
} else {
3534
displayName = tplutil.FormatFilename(name)
3635
typ = TypeFile
37-
url = data.SubItemPrefix + urlEscapedName
36+
url = data.SubItemPrefix + urlEscapedName + data.Context.FileQueryString()
3837
readableSize = tplutil.FormatSize(info.Size())
3938
}
4039

src/serverHandler/pathContext.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,27 @@ func (ctx *pathContext) QueryString() string {
1212
buffer[0] = '?'
1313

1414
if ctx.download {
15-
buffer = append(buffer, []byte("download&")...)
15+
buffer = append(buffer, []byte("download&")...) // 9 bytes
1616
}
1717

1818
if ctx.sort != nil && *(ctx.sort) != ctx.defaultSort {
19-
buffer = append(buffer, []byte("sort=")...)
20-
buffer = append(buffer, []byte(*ctx.sort)...)
21-
buffer = append(buffer, '&')
19+
buffer = append(buffer, []byte("sort=")...) // 5 bytes
20+
buffer = append(buffer, []byte(*ctx.sort)...) // 2 bytes
21+
buffer = append(buffer, '&') // 1 byte
2222
}
2323

2424
buffer = buffer[:len(buffer)-1]
2525
return string(buffer)
2626
}
2727

28+
func (ctx *pathContext) FileQueryString() string {
29+
if ctx.download {
30+
return "?download"
31+
}
32+
33+
return ""
34+
}
35+
2836
func (ctx *pathContext) QueryStringOfSort(sort string) string {
2937
copiedCtx := *ctx
3038
copiedCtx.sort = &sort

0 commit comments

Comments
 (0)