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

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

作者: Nuko | 来源:发表于2018-11-03 20:02 被阅读0次

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

    package main
    import (
        "fmt"
        "net/http"
        "io/ioutil"
        "net"
        "os"
    )
    func check(e error) {
        if e!=nil{
            fmt.Println(e)
        }
    }
    
    func main() {
        fmt.Println("请访问下面的链接:")
        showip()
    http.HandleFunc("/", uploadFileHandler)
    http.Handle("/file/",http.StripPrefix("/file/",http.FileServer(http.Dir("/home/banapy"))))
    http.ListenAndServe(":8080",nil)
    }
    func uploadFileHandler(w http.ResponseWriter,r *http.Request){
    /**/
        fmt.Fprintln(w,`
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>多平台局域网内文件互传</title>
    </head>
    <body style="text-align: center;"> 
        <h1>多平台局域网内文件互传</h1>
        <br>
        <br>
        <form action="UploadFile.ashx" method="post" enctype="multipart/form-data">
        <input type="file" name="fileUpload" />
        <input type="submit" name="上传文件">
        </form>
            <br>
        <br>
            <br>
        <br>
        <a href="/file">文件下载</a>
    </body>
    </html>
            `)
        if r.Method=="POST"{
            file, handler, err := r.FormFile("fileUpload") //name的字段
            if err != nil {
                fmt.Println(err)
                return
            }
            defer file.Close()
            fileBytes, err := ioutil.ReadAll(file)
                check(err)
            newFile, err := os.Create("/home/banapy/tmp/" + handler.Filename)
                check(err)  
                defer newFile.Close()
            if _, err := newFile.Write(fileBytes); err != nil {
                check(err)
                return
            }
            fmt.Println(" upload successfully:" +"/home/banapy/tmp/" + handler.Filename )
            w.Write([]byte("SUCCESS"))
        }
    }
    func showip() {
        addrs, err := net.InterfaceAddrs()
        if err != nil {
            fmt.Println(err)
            os.Exit(1)
        }
        for _, address := range addrs {
            // 检查ip地址判断是否回环地址
            if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
                if ipnet.IP.To4() != nil {
                    fmt.Println(ipnet.IP.String()+":8080")
                }
            }
        }
    }
    
    

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

    相关文章

      网友评论

          本文标题:golang实现局域网内简单文件服务

          本文链接:https://www.haomeiwen.com/subject/fsclxqtx.html