关于Go的一个文件目录共享应用实例

<pre style="margin-top: 0px; margin-bottom: 0px;"><span style=" font-weight:600; color:#000080;">package</span><span style=" color:#c0c0c0;"> </span>main

import (
    "flag"
    "fmt"
    "net/http"
    "os/exec"
    "path/filepath"
    "strings"
    "sync"
    "text/template"
)

const L = `<html>
<title>文件列表</title>
<body>
    {{$ip := .IP}}
    {{$dir := .Dir}}
    {{range $k,$v := .List}}<a href="http://{{$ip}}/{{$dir}}/{{$v}}">{{$v}}</a><br>
    {{end}}
</body>
</html>`

var path *string = flag.String("p", "/tmp", "共享的路径")

type Dirinfo struct {
    lock sync.Mutex
    IP   string
    Dir  string
    List []string
}

var x Dirinfo
var name, dir string

func main() {
    flag.Parse()
    name = filepath.Base(*path)
    dir = filepath.Dir(*path)
    l := list(*path)
    x.Dir = name
    x.List = l
    fmt.Println("共享的目录:", *path)
    http.Handle(fmt.Sprintf("/%s/", name), http.FileServer(http.Dir(dir)))
    http.HandleFunc("/", router)
    http.ListenAndServe(":1789", nil)
}

func router(w http.ResponseWriter, r *http.Request) {
    x.lock.Lock()
    x.IP = r.Host
    x.lock.Unlock()
    t := template.New("")
    t.Parse(L)
    t.Execute(w, x)
}

func list(path string) []string {
    cmd := exec.Command("ls", "-t", path)
    b, _ := cmd.Output()
    l := strings.Split(string(b), "\n")
    return l
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 06:17:34

关于Go的一个文件目录共享应用实例的相关文章

分享一个批量导出当前实例下的所有linkedserver脚本

原文:分享一个批量导出当前实例下的所有linkedserver脚本 分享一个批量导出当前实例下的所有linkedserver脚本 很多时候,我们都需要导出实例下面的登录用户,job,linkedserver等等 导出job比较复杂,下午写了一个脚本把所有的linkedserver导出来,但是密码不会显示出来 下面脚本在SQL2008 R2下面测试通过 -- ============================================= -- Author: <桦仔> -- Blog

一个基于共享内存的ipc通信框架

一个基于共享内存的ipc通信框架 与共享内存相关的操作主要包括共享内存的初始化, 共享内存的释放, 共享内存的锁的相关操作, 在这里操作共享内存的环境是: 1 多个进程没有亲缘关系, 也没有server/client关系, 是多个不相关进程并发操作共享内存 2 共享内存一开始不存在, 由第一个访问他的进程创建 3 当共享内存退出时, 由最后一个离开的进程释放共享内存, 并清除信号量 在这个问题之中, 主要有两个比较大的问题: 1 怎样新建并初始化共享内存 新建共享内存的数据都可以用信号量来控制,

【CentOS】一个简单的Expect实例详解

Expect是基于Tcl的相对简单的一个免费的基本变成工具语言,用于实现自动和交互式任务程序进行通信,无须人工干预. 一.Expect的安装检查与Linux系统的实验环境 1.Expect的安装 [[email protected]]# rpm -qa expect expect-5.43.0-8.el5 expect-5.43.0-8.el5 #如果未安装expect,可以通过yum进行安装 [[email protected]]# yum install expect -y 2.Linux的

C++ 删除一个文件目录下的所有文件以及目录

1 //删除一个文件目录下的所有文件,并删除当前文件夹 chrDirName = _T("c:\\123"); 2 BOOL CIVMSvrInfo::ReleaseDirectory(CString chrDirName) 3 { 4 BOOL bRemove = DoRemoveDirectory(chrDirName); 5 if (bRemove) 6 ::RemoveDirectory(chrDirName); 7 else 8 return FALSE; 9 10 retu

高级I/O复用技术:Epoll的使用及一个完整的C实例

高性能的网络服务器需要同时并发处理大量的客户端,而采用以前的那种对每个连接使用一个分开的线程或进程方法效率不高,因为处理大量客户端的时候,资源的使用及进程上下文的切换将会影响服务器的性能.一个可替代的方法是在一个单一的线程中使用非阻塞的I/O(non-blocking I/O).         这篇文章主要介绍linux下的epoll(7)方法,其有着良好的就绪事件通知机制.我们将会使用C来展现一个完整的TCP服务器实现代码.Epoll是被linux2.6开始引进的,但是不被其他的类UNIX系

php中实现的一个curl批处理的实例

curl是利用URL语法在命令行方式下工作的开源文件传输工具 本文在php中实现了的一个curl批处理的实例. 代码如下: 1 header("Content-Type:text/html;charset=utf8"); 2 3 /* 先获取两个页面的所有a标签 */ 4 // 初始化两个简单处理句柄 5 $ch1 = curl_init(); 6 $ch2 = curl_init(); 7 curl_setopt_array($ch1,array( 8 CURLOPT_URL =&g

车楚网 一个车辆共享的平台

车楚网 一个车辆共享的平台. 网址:http://www.chechuw.com/    百度直接搜索 车楚网 就是我们啦! (平台首页) 1.免费发布车辆租赁信息: 2.自己网上开车店,自由管理店铺,不需任何费用: 3.独立域名地址属于您.可直接浏览器输入您网店的地址.直接跳转,您还在等什么: 4.平台pv每天4000,高峰时刻20000,利用我们的优势帮助您的公司转型互联网,更您带来更多的客户: 5.我们正在招募合作租赁公司,邀您加入我们: 车楚网创立于2014年10月,主要为个人和租赁公司

C#中一个窗口是一个类呢,还是一个窗口类的实例呢?(转)

C#中一个窗口是一个类呢,还是一个窗口类的实例呢? 答: 没有一个人说到重点上. 一个窗口,它不是仅仅用一个类可以描述的: 首先,这个窗口的数据类型类型,是从Form类派生下来的,也就是说它的定义是一个类. 但是,这个窗口仅仅定义是不能存在于现实中的,它要借助于Application类才能够诞生,才能够开始运行,但是诞生的,不是这个类,而是这个从Form类派生下来的类的一个或者某个实例. 谈到Application类,就不能不提起Program类:因为Application类必须在Program

一个简单的backbone实例(基于139邮箱)

先看一下效果图: 代码如下: <!doctype html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>邮箱前端实现</title> <style type="text/css"> *{