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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM