-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathfileServer.java
More file actions
95 lines (93 loc) · 2.86 KB
/
fileServer.java
File metadata and controls
95 lines (93 loc) · 2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package net.incognitas;
import com.sun.net.httpserver.*;
import java.io.*;
import java.net.*;
public class fileServer
{
private static HttpServer server;
private static int port = 80;
private static String fileSystemPath = "files";
public static void main(String args[])
{
if(args.length > 0) port = Integer.parseInt(args[0]);
if(args.length > 1) fileSystemPath = args[1];
System.out.println("tips:U can specify port number and base folder in args");
System.out.println("file server is running on localhost:" + port + " and based on " + fileSystemPath);
try
{
server = HttpServer.create(new InetSocketAddress(port), 0);
server.setExecutor(null);
server.createContext("/",exchange ->
{
URI uri = exchange.getRequestURI();
String path = uri.getPath();
try
{
OutputStream os = exchange.getResponseBody();
byte[] buffer = new byte[1024];
System.out.println(path);
InputStream is = fileServer.class.getResourceAsStream("/" + fileSystemPath + path);
if(is == null)
{
File f = new File(fileSystemPath + path);
String ext = path.substring(path.lastIndexOf(".") + 1);
if(f.isDirectory())
{
Headers header = exchange.getResponseHeaders();
header.add("Content-Type","text/plain; charset=UTF-8");
exchange.sendResponseHeaders(200,0);
String[] filenames = f.list();
for(String filename : filenames)
{
os.write((filename + "\n").getBytes("UTF-8"));
}
os.close();
return;
}
else
{
Headers header = exchange.getResponseHeaders();
String type = "text/plain; charset=UTF-8";
if(ext.equals("html") || ext.equals("htm")) type = "text/html; charset=UTF-8";
else if(ext.equals("js")) type = "text/javascript; charset=UTF-8";
else if(ext.equals("css")) type = "text/css; charset=UTF-8";
else if(ext.equals("svg")) type = "image/svg+xml; charset=UTF-8";
else if(ext.equals("png")) type = "image/png;";
else if(ext.equals("jpg")) type = "image/jpg";
else if(ext.equals("gif")) type = "image/gif";
else if(ext.equals("json")) type = "text/json; charset=UTF-8";
header.add("Content-Type", type);
is = new FileInputStream(f);
}
}
/*else
{
Headers header = exchange.getResponseHeaders();
header.add("Content-Type","text/plain; charset=big5");
}*/
exchange.sendResponseHeaders(200,0);
int hasRead;
while((hasRead = is.read(buffer)) > 0)
{
os.write(buffer,0,hasRead);
}
is.close();
os.close();
}
catch(Exception e)
{
exchange.sendResponseHeaders(404,0);
}
finally
{
exchange.close();
}
});
server.start();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}