0
|
1 /*
|
|
2 server.go : server-program.
|
4
|
3 Version : 1.1
|
|
4 Last Change: 2018-10-12 金 14:37:48.
|
0
|
5
|
|
6 install to: server_root/
|
|
7
|
|
8 server_root/server
|
|
9 + db/
|
|
10 + release/
|
|
11 + images/
|
|
12 */
|
|
13 package main
|
|
14
|
|
15 import(
|
|
16 "path/filepath"
|
|
17 "fmt"
|
|
18 "io"
|
|
19 "log"
|
|
20 "net"
|
|
21 "net/http"
|
|
22 "os"
|
3
|
23 "time"
|
0
|
24 )
|
|
25
|
3
|
26 var server string
|
|
27 var port string
|
|
28 var server_root string
|
4
|
29 var version string
|
3
|
30
|
|
31 func init() {
|
|
32 port = ":3910"
|
|
33 server_root = filepath.Dir( os.Args[0] )
|
4
|
34 version = "1.1"
|
3
|
35 }
|
|
36
|
0
|
37 func main() {
|
|
38
|
3
|
39 // setting IP-Address & Port
|
0
|
40 addrs, err := net.InterfaceAddrs()
|
|
41 if err != nil {
|
|
42 log.Fatal( err )
|
|
43 }
|
|
44 for _, a := range addrs {
|
|
45 if ipnet, ok := a.( *net.IPNet ); ok && !ipnet.IP.IsLoopback() {
|
|
46 if ipnet.IP.To4() != nil {
|
|
47 server = ipnet.IP.String() + port
|
|
48 }
|
|
49 }
|
|
50 }
|
|
51
|
3
|
52 // start Web-server
|
4
|
53 fmt.Println( "server start [", server, "] ( program version", version, ")" )
|
|
54 http.HandleFunc( "/", handler )
|
|
55 http.HandleFunc( "/upload", upload_handler )
|
0
|
56 log.Fatal( http.ListenAndServe( server, nil ) )
|
|
57 }
|
|
58
|
3
|
59 func handler( w http.ResponseWriter, r *http.Request ) {
|
|
60 file := filepath.Join( server_root, filepath.FromSlash( r.URL.Path ) )
|
|
61 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", file )
|
|
62 f, err := os.Open( file )
|
|
63 if err != nil {
|
|
64 http.NotFound( w, r )
|
|
65 return
|
|
66 }
|
|
67 defer f.Close()
|
|
68 io.Copy( w, f )
|
|
69 }
|
4
|
70
|
|
71 func upload_handler( w http.ResponseWriter, r *http.Request ) {
|
|
72 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/upload" )
|
|
73 now := time.Now().Format( "20060102_150405" )
|
|
74 file := filepath.Join( server_root, "upload", now )
|
|
75 f, err := os.Create( file )
|
|
76 if err != nil {
|
|
77 http.NotFound( w, r )
|
|
78 return
|
|
79 }
|
|
80 n, err := io.Copy( f, r.Body )
|
|
81 if err != nil {
|
|
82 http.NotFound( w, r )
|
|
83 return
|
|
84 }
|
|
85 f.Close()
|
|
86 w.Write( []byte( fmt.Sprintf( "%d bytes are recieved.\n", n ) ) )
|
|
87 }
|
|
88
|