view go/server.go @ 6:9a8b581c1993

improve performance.
author pyon@macmini
date Tue, 23 Oct 2018 19:15:22 +0900
parents 06342fc544e4
children 82f9af6aa7e4
line wrap: on
line source

/*
 server.go  : server-program.
 Version    : 1.1
 Last Change: 2018-10-12 金 14:37:48.

 install to: server_root/

 server_root/server
            + db/
            + release/
            + images/
*/
package main

import(
    "path/filepath"
	"fmt"
	"io"
	"log"
	"net"
    "net/http"
	"os"
	"time"
)

var server string
var port   string
var server_root string
var version string

func init() {
	port = ":3910"
    server_root = filepath.Dir( os.Args[0] )
	version = "1.1"
}

func main() {

	// setting IP-Address & Port
	addrs, err := net.InterfaceAddrs()
	if err != nil {
		log.Fatal( err )
	}
	for _, a := range addrs {
		if ipnet, ok := a.( *net.IPNet ); ok && !ipnet.IP.IsLoopback() {
			if ipnet.IP.To4() != nil {
				server = ipnet.IP.String() + port
			}
		}
	}

	// start Web-server
	fmt.Println( "server start [", server, "] ( program version", version, ")" )
	http.HandleFunc( "/",       handler        )
	http.HandleFunc( "/upload", upload_handler )
	log.Fatal( http.ListenAndServe( server, nil ) )
}

func handler( w http.ResponseWriter, r *http.Request ) {
	file := filepath.Join( server_root, filepath.FromSlash( r.URL.Path ) )
	fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", file )
	f, err := os.Open( file )
	if err != nil {
		http.NotFound( w, r )
		return
	}
	defer f.Close()
	io.Copy( w, f )
}

func upload_handler( w http.ResponseWriter, r *http.Request ) {
	fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/upload" )
	now := time.Now().Format( "20060102_150405" )
	file := filepath.Join( server_root, "upload", now )
	f, err := os.Create( file )
	if err != nil {
		http.NotFound( w, r )
		return
	}
	n, err := io.Copy( f, r.Body )
	if err != nil {
		http.NotFound( w, r )
		return
	}
	f.Close()
	w.Write( []byte( fmt.Sprintf( "%d bytes are recieved.\n", n ) ) )
}