main.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. "os"
  7. "path/filepath"
  8. )
  9. const scriptsDir = "scripts"
  10. func main() {
  11. // 确保脚本目录存在
  12. if _, err := os.Stat(scriptsDir); os.IsNotExist(err) {
  13. os.Mkdir(scriptsDir, os.ModePerm)
  14. }
  15. // 提供脚本下载
  16. http.HandleFunc("/scripts/", func(w http.ResponseWriter, r *http.Request) {
  17. if r.Method == http.MethodGet {
  18. fileName := filepath.Base(r.URL.Path)
  19. filePath := filepath.Join(scriptsDir, fileName)
  20. // 检查文件是否存在
  21. if _, err := os.Stat(filePath); os.IsNotExist(err) {
  22. http.Error(w, "脚本未找到", http.StatusNotFound)
  23. return
  24. }
  25. // 打开文件
  26. file, err := os.Open(filePath)
  27. if err != nil {
  28. http.Error(w, "无法打开文件", http.StatusInternalServerError)
  29. return
  30. }
  31. defer file.Close()
  32. // 获取文件的修改时间
  33. fileInfo, err := file.Stat()
  34. if err != nil {
  35. http.Error(w, "无法获取文件信息", http.StatusInternalServerError)
  36. return
  37. }
  38. // 提供文件下载
  39. http.ServeContent(w, r, fileName, fileInfo.ModTime(), file)
  40. } else {
  41. http.Error(w, "不支持的方法", http.StatusMethodNotAllowed)
  42. }
  43. })
  44. // 启动服务器
  45. port := "18123"
  46. fmt.Printf("服务器已启动,监听端口: %s\n", port)
  47. log.Fatal(http.ListenAndServe(":"+port, nil))
  48. }