zoukankan      html  css  js  c++  java
  • 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 小结

  • 相关阅读:
    hdu2328 Corporate Identity
    hdu1238 Substrings
    hdu4300 Clairewd’s message
    hdu3336 Count the string
    hdu2597 Simpsons’ Hidden Talents
    poj3080 Blue Jeans
    poj2752 Seek the Name, Seek the Fame
    poj2406 Power Strings
    hust1010 The Minimum Length
    hdu1358 Period
  • 原文地址:https://www.cnblogs.com/fanbi/p/12048043.html
Copyright © 2011-2022 走看看