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

栏目: Go · 发布时间: 6年前

内容简介:linux上没qq,手机和电脑之间传输文件就变得异常困难。要么从充电器插头上拔下数据线插到电脑上,手机开启usb文件传输功能,要么蓝牙传输,传输速度不是一般的慢,10M的图片一分钟才传完。懒得在网上找类似功能的软件就手写了一个。速度很快。注意:直接复制代码可能不行,要配置个接受文件的/home/username/tmp目录和展示文件的目录http.Dir("/home/banapy")

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")


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ajax for Web Application Developers

Ajax for Web Application Developers

Kris Hadlock / Sams / 2006-10-30 / GBP 32.99

Book Description Reusable components and patterns for Ajax-driven applications Ajax is one of the latest and greatest ways to improve users’ online experience and create new and innovative web f......一起来看看 《Ajax for Web Application Developers》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具