kobe6258 5 ماه پیش
والد
کامیت
74f04612cf
1فایلهای تغییر یافته به همراه15 افزوده شده و 4 حذف شده
  1. 15 4
      controllers/user.go

+ 15 - 4
controllers/user.go

@@ -8,6 +8,7 @@ import (
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"net/http"
+	"net/url"
 	"strconv"
 	"strings"
 	"time"
@@ -426,10 +427,20 @@ func (this *UserController) ExportTemplateUsers() {
 	year, month, day := time.Now().Date()
 	yearStr := strconv.Itoa(year)[2:]
 	fileName := fmt.Sprintf("临时用户表%s.%d.%d.xlsx", yearStr, month, day)
-	encodedFilename := encodeChineseFilename(fileName)
-	this.Ctx.ResponseWriter.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
-	this.Ctx.ResponseWriter.Header().Set("Content-Disposition", encodedFilename)
-	this.Ctx.ResponseWriter.Header().Set("File-Name", fileName)
+	// https://tools.ietf.org/html/rfc6266#section-4.3
+	fn := url.PathEscape(fileName)
+	if fileName == fn {
+		fn = "filename=" + fn
+	} else {
+		fn = "filename=" + fileName + "; filename*=utf-8''" + fn
+	}
+	this.Ctx.ResponseWriter.Header().Set("Content-Disposition", "attachment; "+fn)
+	this.Ctx.ResponseWriter.Header().Set("Content-Description", "File Transfer")
+	this.Ctx.ResponseWriter.Header().Set("Content-Type", "application/octet-stream")
+	this.Ctx.ResponseWriter.Header().Set("Content-Transfer-Encoding", "binary")
+	this.Ctx.ResponseWriter.Header().Set("Expires", "0")
+	this.Ctx.ResponseWriter.Header().Set("Cache-Control", "must-revalidate")
+	this.Ctx.ResponseWriter.Header().Set("Pragma", "public")
 	list := make([]models.TemplateUsersItem, 0)
 	for _, v := range userList {
 		list = append(list, v.ToItem())