golang实现局域网内简单文件服务

https://www.jianshu.com/p/1aefa32d0349
Nuko 2018.11.03 20:02* 字数 149 阅读 1评论 0喜欢 0

linux上没qq,手机和电脑之间传输文件就变得异常困难。要么从充电器插头上拔下数据线插到电脑上,手机开启usb文件传输功能,要么蓝牙传输,传输速度不是一般的慢,10M的图片一分钟才传完。懒得在网上找类似功能的软件就手写了一个。速度很快。

  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. "io/ioutil"
  6. "net"
  7. "os"
  8. )
  9. func check(e error) {
  10. if e!=nil{
  11. fmt.Println(e)
  12. }
  13. }
  14. func main() {
  15. fmt.Println("请访问下面的链接:")
  16. showip()
  17. http.HandleFunc("/", uploadFileHandler)
  18. http.Handle("/file/",http.StripPrefix("/file/",http.FileServer(http.Dir("/home/banapy"))))
  19. http.ListenAndServe(":8080",nil)
  20. }
  21. func uploadFileHandler(w http.ResponseWriter,r *http.Request){
  22. /**/
  23. fmt.Fprintln(w,`
  24. <!DOCTYPE html>
  25. <html lang="en">
  26. <head>
  27. <meta charset="UTF-8">
  28. <title>多平台局域网内文件互传</title>
  29. </head>
  30. <body style="text-align: center;">
  31. <h1>多平台局域网内文件互传</h1>
  32. <br>
  33. <br>
  34. <form action="UploadFile.ashx" method="post" enctype="multipart/form-data">
  35. <input type="file" name="fileUpload" />
  36. <input type="submit" name="上传文件">
  37. </form>
  38. <br>
  39. <br>
  40. <br>
  41. <br>
  42. <a href="/file">文件下载</a>
  43. </body>
  44. </html>
  45. `)
  46. if r.Method=="POST"{
  47. file, handler, err := r.FormFile("fileUpload") //name的字段
  48. if err != nil {
  49. fmt.Println(err)
  50. return
  51. }
  52. defer file.Close()
  53. fileBytes, err := ioutil.ReadAll(file)
  54. check(err)
  55. newFile, err := os.Create("/home/banapy/tmp/" + handler.Filename)
  56. check(err)
  57. defer newFile.Close()
  58. if _, err := newFile.Write(fileBytes); err != nil {
  59. check(err)
  60. return
  61. }
  62. fmt.Println(" upload successfully:" +"/home/banapy/tmp/" + handler.Filename )
  63. w.Write([]byte("SUCCESS"))
  64. }
  65. }
  66. func showip() {
  67. addrs, err := net.InterfaceAddrs()
  68. if err != nil {
  69. fmt.Println(err)
  70. os.Exit(1)
  71. }
  72. for _, address := range addrs {
  73. // 检查ip地址判断是否回环地址
  74. if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
  75. if ipnet.IP.To4() != nil {
  76. fmt.Println(ipnet.IP.String()+":8080")
  77. }
  78. }
  79. }
  80. }

注意:直接复制代码可能不行,要配置个接受文件的/home/username/tmp目录和展示文件的目录http.Dir("/home/banapy")

ft_authoradmin  ft_create_time2018-11-19 18:34
 ft_update_time2018-11-19 18:35