main.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // 文件上传服务器,json格式操作
  2. package main
  3. import (
  4. "flag"
  5. "fmt"
  6. "io"
  7. "log"
  8. "net/http"
  9. "os"
  10. "path/filepath"
  11. )
  12. var (
  13. path = flag.String("path", "./", "路径")
  14. addr = flag.String("addr", ":20008", "地址")
  15. )
  16. func init() {
  17. flag.Parse()
  18. }
  19. // uploadFileHandler
  20. func uploadFileHandler(w http.ResponseWriter, r *http.Request) {
  21. log.Println("请求过来了")
  22. // 设置CORS头部,允许所有源(*)进行所有方法的请求
  23. w.Header().Set("Access-Control-Allow-Origin", "*")
  24. w.Header().Set("Content-Type", "application/json")
  25. // 检查是否是POST请求
  26. if r.Method != "POST" {
  27. http.Error(w, "只接受POST请求", http.StatusBadRequest)
  28. return
  29. }
  30. // 解析上传的文件
  31. file, _, err := r.FormFile("file")
  32. if err != nil {
  33. http.Error(w, "解析文件失败", http.StatusBadRequest)
  34. return
  35. }
  36. defer file.Close()
  37. filename := r.FormValue("filename")
  38. fo, err := os.Create(filepath.Join(*path, filename))
  39. if err != nil {
  40. http.Error(w, "创建文件"+filename+"失败", http.StatusBadRequest)
  41. return
  42. }
  43. defer fo.Close()
  44. io.Copy(fo, file)
  45. // 返回成功响应
  46. fmt.Fprint(w, fmt.Sprintf(`{"code":200,"msg":"ok","filename":"%s"}`, filename))
  47. }
  48. func main() {
  49. http.HandleFunc("/upload", uploadFileHandler)
  50. if err := http.ListenAndServeTLS(*addr, "./client.crt", "./client.key", nil); err != nil {
  51. log.Fatal(err)
  52. }
  53. }