package weapp import ( "io" "net/http" "net/url" "os" "strconv" "strings" "github.com/shockliu/logger" ) // 下载链接 https://www.daymele.com/mapp/download/recharge.xls func Download(w http.ResponseWriter, req *http.Request) { if req.RequestURI == "/favicon.ico" { return } pos := strings.LastIndex(req.RequestURI, "/") + 1 logger.Debugf("Download:%s\n", req.RequestURI) filename := req.RequestURI[pos:] enEscapeUrl, err := url.QueryUnescape(filename) if err != nil { logger.Errorf("下载文件获取文件名失败:%s\n", err) w.Write([]byte("暂时无法下载您所需要的文件,请确认文件名称或联系管理员")) return } logger.Debugf("Content:%s\n", enEscapeUrl) f, err := os.Open("/home/share/" + enEscapeUrl) if err != nil { logger.Errorf("下载文件打开失败:%s\n", err) w.Write([]byte("暂时无法下载您所需要的文件,请确认文件名称或联系管理员")) return } info, err := f.Stat() if err != nil { logger.Errorf("下载文件状态失败:%s\n", err) w.Write([]byte("暂时无法下载您所需要的文件,请确认文件名称或联系管理员")) return } contentType := "application/octet-stream" w.Header().Set("content-Disposition", "attachment;filename="+filename) w.Header().Set("Content-Type", contentType) w.Header().Set("Content-Length", strconv.FormatInt(info.Size(), 10)) f.Seek(0, 0) io.Copy(w, f) }