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

golang下载图片,而非预览的更多相关文章

  1. 解决vue、js 下载图片浏览器默认预览而不是下载

    在网页上,如果我们下载的地址对应的是一个jpg文件,txt文件等,点击链接时,浏览器默认的是打开这些文件而不是下载,那么如何才能实现默认下载呢? 后端解决 这就是Content-Disposition ...

  2. MWeb 1.4 新功能介绍一:引入文件夹到 MWeb 中管理,支持 Octpress、Jekyll 等静态博客拖拽插入图片和实时预览

    之前在 MWeb 中打开非文档库中的 Markdown 文档,如果文档中有引用到本机图片,是没办法在 MWeb 中显示出来和预览的.这是因为 Apple 规定在 Mac App Store(MAS) ...

  3. 模拟QQ心情图片上传预览

    出于安全性能的考虑,目前js端不支持获取本地图片进行预览,正好在做一款类似于QQ心情的发布框,找了不少jquery插件,没几个能满足需求,因此自己使用SWFuplad来实现这个图片上传预览. 先粘上以 ...

  4. Android实现本地图片选择及预览缩放效果仿春雨医生

    在做项目时常常会遇到选择本地图片的需求.曾经都是懒得写直接调用系统方法来选择图片.可是这样并不能实现多选效果.近期又遇到了,所以还是写一个demo好了.以后也方便使用.还是首先来看看效果 显示的图片使 ...

  5. 兼容好的JS图片上传预览代码

    转 : http://www.codefans.net/articles/1395.shtml 兼容好的JS图片上传预览代码 (谷歌,IE11) <html xmlns="http:/ ...

  6. HTML5开发笔记:图片上传预览

    我们知道通过<input type="file">可以用来进行一个图片或者文件的上传,然而浏览器自带的一个缩略图预览的功能其实是相当不美观的,很多时候我们希望可以在上传 ...

  7. Jquery图片上传预览效果

    uploadPreview.js jQuery.fn.extend({ uploadPreview: function (opts) { var _self = this, _this = $(thi ...

  8. [前端 4] 使用Js实现图片上传预览

    导读:今天做图片上传预览,刚开始的做法是,先将图片上传到Nginx,然后重新加载页面才能看到这个图片.在这个过程中,用户一直都看不到自己上传的文件是什么样子.Ps:我发现我真的有强迫症了,都告诉我说不 ...

  9. html5 图片转base64预览显示

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  10. Javascript之图片上传预览

    使用Javascript之图片上传预览,我们无需上传到服务器中,兼容所有浏览器. 关键方法是使用微软库filter:progid:DXImageTransform.Microsoft.AlphaIma ...

随机推荐

  1. 百度云部署SSL证书

    查找中间证书 为了确保兼容到所有浏览器,我们必须在阿里云上部署中间证书,如果不部署证书,虽然安装过程可以完全也不会报错,但可能导致Android系统,Chrome 和 Firefox等浏览器无法识别. ...

  2. 关于VS2015 发布.net mvc 网站失败的问题

    问题:VS生成成功,发布失败,在“正在连接到***文件夹”处就不能继续了.. 项目开发告一段落,准备部署到服务器上进行最后测试,但是始终发布失败  生成成功,发布失败,没有任何提示信息 一开始以为是文 ...

  3. [TCP/IP] ping traceroute和TTL

    1.Time To Live是生存时间的意思,就是说这个ping的数据包能在网络上存在多少时间.当我们对网络上的主机进行ping操作的时候,我们本地机器会发出一个数据包,数据包经过一定数量的路由器传送 ...

  4. Delphi-基础(for循环)

    1.判断0~10之间,当循环I=3时候跳出当前循环,当I等于8时候,退出当前循环. procedure Countand(); var I: Integer; begin do begin Write ...

  5. js 落幕

    1.关于路由的跳转 核心是 a 再取出后缀作为参数判断 最后 innerHTML 上 <!DOCTYPE html> <html lang="en"> &l ...

  6. 201871010133-赵永军《面向对象程序设计(java)》第十三周学习总结

    201871010133-赵永军<面向对象程序设计(java)>第十三周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  7. TensorFlow语法点滴

    1. tf.variable_scope生成一个上下文管理器,用于获取已经生成的变量 with tf.variable_scope('pnet'): data = tf.placeholder(tf. ...

  8. JavaEE开发环境配置

    JavaEE开发环境配置 Tomcat的下载和安装 1.登录Tomcat 站点,下载Tomcat最新版本http://tomcat.apache.org/Windows平台下载ZIP包,LInux平台 ...

  9. 【Spring 整合篇】整合SpringMVC+Mybatis(一)

    首先,创建Maven Project,packaging为war,修改pom.xml. <properties> <!-- JDK版本 --> <java.version ...

  10. springboot对JPA的支持

    springboot之jpa支持 导入相关pom依赖 <dependency> <groupId>org.springframework.boot</groupId> ...