最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

靜態(tài)文件共享服務器(自定義網(wǎng)頁路徑前綴)-golang

2020-11-26 08:55 作者:杜衡圖南  | 我要投稿

使用方法:將下方文件保存為main.go,按照目錄結構創(chuàng)建文件夾,編譯運行。

// 靜態(tài)文件共享服務器

// 可以將本地的文件夾共享到網(wǎng)頁中,本代碼主要實現(xiàn)自定義網(wǎng)頁路徑前綴(默認是"/files/")。
// 編譯運行后,默認將files文件夾的內(nèi)容共享到 http://127.0.0.1:8443/files/
// 日志文件存放于log目錄下
/* 目錄結構:
FileServer/
|-- bin ?用于存放編譯后的主程序文件
|-- certs ?證書文件夾(用于支持STL)
|-- files ?用于分享的文件夾
|-- log ?日志文件夾
`-- main.go ?本程序源碼
*/
package main

import (
? "fmt"
? "io"
? "log"
? "net/http"
? "net/url"
? "os"
? "os/exec"
? "path/filepath"
? "strconv"
? "strings"
)
var filesPath string = ""

// init 初始化函數(shù),用于初始化日志輸出
func init(){
? file, _ := exec.LookPath(os.Args[0])
? //path, _ := filepath.Abs(filepath.Dir(filepath.Dir(file)))
? path, _ := filepath.Abs(filepath.Dir(file))
? logPath :=filepath.Dir(path)+"/log"
? //logPath := path +"/log"
? fmt.Println("$ Log Path:",logPath)
? err := os.MkdirAll(logPath, os.ModePerm)
? if err!=nil{
? ? ?fmt.Println(err)
? }

? fmt.Println("$ Log File:",logPath+"/server.log")
? logFile, _ := os.OpenFile(logPath+"/server.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
? log.SetOutput(logFile)
}

// 程序入口
func main() {
? host := "8443"
? file, _ := exec.LookPath(os.Args[0])
? path, _ := filepath.Abs(filepath.Dir(file))
? fmt.Println("$ File Server Start!")
? filesPath =filepath.Dir(path)+"/files"

? // Files目錄支持
? fmt.Println("$ Files Path:", filesPath)
? http.HandleFunc("/files/",fileServer)
?
? // API支持
? fmt.Println("$ API URL:","/api")
? http.HandleFunc("/api", apiHandler)

? // 404 Page
? http.HandleFunc("/", notFoundHandler)

? certsPath, _ := filepath.Abs(filepath.Dir(path)+"/certs")
? fmt.Println("$ Certificates Path:",certsPath)
? fmt.Println("$ Listen on Port:", host)

? log.Println("$ Server Start. Listen on[",host,"]")

? // 如果需要支持HTTPS,則使用下面的語句
? //err := http.ListenAndServeTLS(":"+host, certsPath+"/a.crt", certsPath+"/b.key", nil)
? // 如果不使用證書,則使用下面的語句
? err := http.ListenAndServe(":"+host, nil)


? if err != nil {
? ? ?fmt.Println(err)
? }
}

// fileServer 文件服務器
func fileServer(w http.ResponseWriter, r *http.Request) ?{
? logging("FileServer",r)
? prefix := "/files/"
? h := http.FileServer(http.Dir(filesPath))
? if p := strings.TrimPrefix(r.URL.Path, prefix); len(p) < len(r.URL.Path) {
? ? ?r2 := new(http.Request)
? ? ?*r2 = *r
? ? ?r2.URL = new(url.URL)
? ? ?*r2.URL = *r.URL
? ? ?r2.URL.Path = p
? ? ?h.ServeHTTP(w, r2)
? } else {
? ? ?notFoundHandler(w, r)
? }
}

// notFoundHandler 頁面未找到
func notFoundHandler(w http.ResponseWriter, r *http.Request) {
? logging("HTTP/"+ strconv.Itoa(http.StatusNotFound),r)
? w.WriteHeader(http.StatusNotFound)
}

// apiHandler API接口
func apiHandler(w http.ResponseWriter, r *http.Request) {
? logging("HTTP/"+ strconv.Itoa(http.StatusOK),r)
? w.Header().Add("Content-Type", "application/json")
? _, _ = io.WriteString(w, `{"status":"ok"}`)
}

// logging 輸出日志
func logging(states string,r *http.Request){
? logString := "["+states+"]"+r.RemoteAddr+"->"+r.Host+r.RequestURI
? fmt.Println(logString)
? log.Println(logString)
}

靜態(tài)文件共享服務器(自定義網(wǎng)頁路徑前綴)-golang的評論 (共 條)

分享到微博請遵守國家法律
沧州市| 金秀| 佛冈县| 龙南县| 周宁县| 江阴市| 文安县| 富川| 察雅县| 宿松县| 思茅市| 三都| 宜昌市| 石楼县| 宁都县| 开平市| 凤冈县| 涞水县| 罗源县| 泗水县| 崇阳县| 略阳县| 珲春市| 宜良县| 临漳县| 德兴市| 双峰县| 大田县| 绵阳市| 昭苏县| 嘉荫县| 微博| 邵东县| 东城区| 栾城县| 福建省| 资源县| 疏勒县| 沈阳市| 慈溪市| 池州市|