golang下载图片,而非预览
2023-09-11 14:18:06 时间
1 前言
网上查询使用html5,a增加属性download和使用表单get,post提交,都是只能预览,根本原因是返回值需要加入头
w.Header().Add("Content-Type", "application/octet-stream") w.Header().Add("Content-Disposition", "attachment; filename=\""+filename+"\"")
告知浏览器返回值是附件形式下载即可。
2 代码
package DownloadController import ( "fmt" "net/http" "strings" "Project/Utils" "Project/Server/Download" ) func DownloadController(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() w.Header().Set("Access-Control-Allow-Origin", "*") // 允许访问所有域 w.Header().Add("Access-Control-Allow-Headers", "Content-Type") // header的类型 switch r.Method { case "POST", "GET": { urlname := r.FormValue("url") if strings.EqualFold(urlname, "") { resp_json := Utils.GetRespJson(400, "请求参数错误!", nil) fmt.Fprintln(w, string(resp_json)) return } filename, content, err := DownloadServer.Download(urlname) w.Header().Add("Content-Type", "application/octet-stream") w.Header().Add("Content-Disposition", "attachment; filename=\""+filename+"\"") if err != nil { fmt.Println("Read File Err:", err.Error()) resp_json := Utils.GetRespJson(400, "下载失败!", nil) fmt.Fprintln(w, string(resp_json)) return } else { w.Write(content) fmt.Println("Download filename=" + filename + " OK") //resp_json := Utils.GetRespJson(200, "下载成功!", nil) //fmt.Fprintln(w, string(resp_json)) } return } default: resp_json := Utils.GetRespJson(400, "错误的请求方式!", nil) fmt.Fprintln(w, string(resp_json)) return } } package DownloadServer import ( "fmt" "Project/Utils/Config" "os" "io/ioutil" "strings" "net/url" "time" ) func Download(urlname string) (filename string, content []byte, err error) { pos1 := strings.LastIndex(urlname,"Resources") urlname = urlname[pos1:] path := Config.GetValue("project_path") + "/web/" file, err := os.Open(path + urlname) if err != nil { fmt.Println(err) return } defer file.Close() content, err = ioutil.ReadAll(file) pos := strings.LastIndex(urlname, "/") + 1 zipNameNew := urlname[pos:] // 防止中文乱码 timeStr := time.Now().Format("2006010203040506") filename = url.QueryEscape("Res" + timeStr + "_" + zipNameNew) return }
3 小结
略
相关文章
- 从Nexus私服下载和上传资源(二)
- unity3d 关于断点下载和整个下载(用于更新)
- JAVA-数据库之MySQL与JDBC驱动下载与安装
- Android中使用自定义View实现下载进度的显示
- Android公共库(缓存 下拉ListView 下载管理Pro 静默安装 root运行 Java公
- 【BSP视频教程】BSP视频教程第17期:单片机bootloader专题,启动,跳转配置和调试下载的各种用法(2022-06-10)
- SAP CRM product customizing下载的第二个队列
- Android 7.1有些应用无法使用以太网下载视频问题
- servlet 实现下载文件
- nexus3下载地址
- 【GoLang】golang context channel 详解
- ubuntu百度网盘下载大文件
- sftp上传文件和下载文件
- C语言课设-C语言期末大作业-购书系统(附源码下载链接)