1. 程式人生 > 程式設計 >golang實現http server提供檔案下載功能

golang實現http server提供檔案下載功能

簡介

Go(又稱Golang)是Google開發的一種靜態強型別、編譯型、併發型,並具有垃圾回收功能的程式語言。

羅伯特·格瑞史莫(Robert Griesemer),羅勃·派克(Rob Pike)及肯·湯普遜(Ken Thompson)於2007年9月開始設計Go,稍後Ian Lance Taylor、Russ Cox加入專案。Go是基於Inferno作業系統所開發的。Go於2009年11月正式宣佈推出,成為開放原始碼專案,並在Linux及Mac OS X平臺上進行了實現,後來追加了Windows系統下的實現。在2016年,Go被軟體評價公司TIOBE 選為“TIOBE 2016 年最佳語言”。 目前,Go每半年釋出一個二級版本(即從a.x升級到a.y)。

go就是golang 全名是 golang 簡稱go語言

golang實現http server提供檔案下載功能,具體程式碼如下所示:

func FileDownload(w http.ResponseWriter,r *http.Request) {
  filename := get_filename_from_request(r)

  file,_ := os.Open(filename)
  defer file.Close()

  fileHeader := make([]byte,512)
  file.Read(fileHeader)

  fileStat,_ := file.Stat()

  w.Header().Set("Content-Disposition","attachment; filename=" + filename)
  w.Header().Set("Content-Type",http.DetectContentType(fileHeader))
  w.Header().Set("Content-Length",strconv.FormatInt(fileStat.Size(),10))

  file.Seek(0,0)
  io.Copy(w,file)

  return
}

ps:下面看下golang最簡單的http server

簡單的hello world

package main
import (
 "fmt"
 "io"
 "net/http"
)
func main() {
 http.HandleFunc("/",helloWorld)
 e:=http.ListenAndServe(":8888",nil)
 if e!=nil{
 fmt.Println(e.Error())
 }
}
func helloWorld(w http.ResponseWriter,r *http.Request) {
 str:="Hello World"
 n,e:=io.WriteString(w,str)
 if e!=nil{
 fmt.Println(e.Error())
 } else {
 fmt.Println(n," ",len(str))
 }
}

總結

以上所述是小編給大家介紹的golang實現http server提供檔案下載功能,希望對大家有所幫助!