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

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

内容简介: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")


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

查看所有标签

猜你喜欢:

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

Head First HTML5 Programming(中文版)

Head First HTML5 Programming(中文版)

埃里克•弗里曼 (Eric Freeman)、伊丽莎白•罗布森 (Elisabeth Robson) / 中国电力出版社 / 2012-9 / 78.00元

《Head First HTML5 Programming(中文版)》内容简介:你可能想创建具有动态性、交互性、包含丰富数据而且互连的Web页面。先等一下,Web页面?为什么不用HTML5创建成熟的Web应用呢?另外,为什么不使用现代技术,像在移动设备上一样轻松地应用到桌面浏览器呢?当然,你肯定希望使用最新的HTML5技术来完成,比如地理定位、视频、2D绘制、Web存储、Web工作线程等,是不是?......一起来看看 《Head First HTML5 Programming(中文版)》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

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

在线XML、JSON转换工具