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 小结

最新文章

  1. [Java IO]06_JSON操作
  2. Excel应该这么玩——5、三种数据:Excel也是系统
  3. http学习 1-3 chapter3-报文
  4. 分布式缓存技术memcached学习(一)——linux环境下编译memcahed
  5. sparklyr包--实现R与Spark接口
  6. 更改SharePoint 2010 顶部导航为下拉菜单样式
  7. Qt入门之信号与槽机制
  8. SSH登录很慢问题的解决方法
  9. Java框架之Hibernate(二)
  10. json_encode详解
  11. Discuz!另一处SSRF无须登陆无须条件
  12. 利用truffle与智能合约进行交互
  13. ./configure、make、make install
  14. Linux 监控CPU、内存、IO
  15. laravel添加model文件夹,需要改动的地方
  16. 实现Servlet容器一
  17. python魔法方法:__getattr__,__setattr__,__getattribute__
  18. 《剑指offer》第五十六题(数组中只出现一次的两个数字)
  19. Android开发之点击事件(Button)
  20. WorldWind源码剖析系列:可渲染对象类RenderableObject

热门文章

  1. echarts-带面积的折线图
  2. conan使用(三)--打包只有头文件的库
  3. Java中用import导入类和用Class方法加载类有什么区别?
  4. 跟着ALEX 学python day3集合 文件操作 函数和函数式编程 内置函数
  5. LeetCode237-Delete_Node_In_A_Linked_List
  6. VIJOS-P1364 Likecloud-吃、吃、吃
  7. webapi中获取HttpContext
  8. Kettle Unable to get list of element types for namespace 'pentaho'
  9. Nginx目录穿越漏洞
  10. redis持久化方式与优缺点