• golang下载图片,而非预览


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

  • 相关阅读:
    stream流
    python笔记:str.contains小坑之 UserWarning To actually get the groups, use str.extract.
    获取excel的行索引值
    Pandas学习(4、数据载入、存储及文件格式
    python中如何压缩和解压缩文件
    保持服务器屏幕可控制状态
    python判断文件和文件夹是否存在、创建文件夹
    PDF处理
    selenium+python配置chrome浏览器的选项
    python实现复制粘贴
  • 原文地址:https://www.cnblogs.com/fanbi/p/12048043.html
Copyright © 2020-2023  润新知