Skip to content

Commit 4686db2

Browse files
committedJun 22, 2017
Initial commit.
0 parents  commit 4686db2

File tree

1,025 files changed

+971
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,025 files changed

+971
-0
lines changed
 

‎.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
*.class
2+
logs
3+
IMAGESINDEX

‎FrontEnd.java

+215
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
2+
import java.io.*;
3+
import java.util.Base64;
4+
import java.nio.file.*;
5+
import java.sql.*;
6+
import javax.servlet.*;
7+
import javax.servlet.http.*;
8+
import org.eclipse.jetty.server.*;
9+
import org.eclipse.jetty.servlet.*;
10+
11+
public class FrontEnd
12+
{
13+
public static byte[] readAllBytes(InputStream is) throws IOException
14+
{
15+
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
16+
int nRead;
17+
byte[] data = new byte[16384];
18+
while ((nRead = is.read(data, 0, data.length)) != -1) {
19+
buffer.write(data, 0, nRead);
20+
}
21+
buffer.flush();
22+
return buffer.toByteArray();
23+
}
24+
25+
26+
public static void main(String[] args) throws Exception
27+
{
28+
int port = 12345;
29+
if (args.length > 0) {
30+
port = Integer.parseInt(args[0]);
31+
}
32+
Server server = new Server(port);
33+
34+
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
35+
context.setContextPath("/");
36+
37+
ServletHolder fileUploadServletHolder = new ServletHolder(new FrontEndServlet());
38+
fileUploadServletHolder.getRegistration().setMultipartConfig(new MultipartConfigElement("data/tmp"));
39+
context.addServlet(fileUploadServletHolder, "/");
40+
41+
server.setHandler(context);
42+
server.start();
43+
server.join();
44+
45+
}
46+
47+
public static class FrontEndServlet extends HttpServlet
48+
{
49+
public static final String uploadForm =
50+
"<html>\n" +
51+
"<head>\n" +
52+
" <title>MMDB</title>\n" +
53+
" <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/materialize/0.99.0/css/materialize.min.css\">\n" +
54+
" <script type=\"text/javascript\" src=\"https://cdnjs.cloudflare.com/ajax/libs/materialize/0.99.0/js/materialize.min.js\"></script>\n" +
55+
" <script type=\"text/javascript\" src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js\"></script>\n" +
56+
"\n" +
57+
"</head>\n" +
58+
"<body>\n" +
59+
"\n" +
60+
"<nav>\n" +
61+
" <div class=\"nav-wrapper\">\n" +
62+
" <a class=\"brand-logo center\">Content Based Image Retrieval</a>\n" +
63+
" <ul id=\"nav-mobile\" class=\"right hide-on-med-and-down\">\n" +
64+
" <li><a href=\"index.jsp\">Home</a></li>\n" +
65+
" <li><a href=\"about.jsp\">About</a></li>\n" +
66+
" </ul>\n" +
67+
" </div>\n" +
68+
"</nav>\n" +
69+
"\n" +
70+
"<div class=\"container\">\n" +
71+
"\n" +
72+
" <div class=\"row\">\n" +
73+
"\n" +
74+
" <form enctype=\"multipart/form-data\" method=\"post\" name=\"fileinfo\">\n" +
75+
"\n" +
76+
" <div class=\"file-field input-field\">\n" +
77+
" <div class=\"btn\">\n" +
78+
" <span> Upload Image</span>\n" +
79+
" <input type=\"file\" name=\"file\" required>\n" +
80+
" </div>\n" +
81+
" <div class=\"file-path-wrapper\">\n" +
82+
" <input class=\"file-path validate\" type=\"text\" placeholder=\"Upload the reference image..\">\n" +
83+
" </div>\n" +
84+
" <div>\n" +
85+
" <button class=\"btn waves-effect waves-light\" type=\"submit\">Search\n" +
86+
" </button>\n" +
87+
" </div>\n" +
88+
" </div>\n" +
89+
"\n" +
90+
" </form>\n" +
91+
" </div>\n" +
92+
"\n" +
93+
" <div id=\"results\" class=\"row\">\n" +
94+
"\n" +
95+
" </div>\n" +
96+
"\n" +
97+
"\n" +
98+
"</div>\n" +
99+
"\n" +
100+
"\n" +
101+
"<script>\n" +
102+
" var form = document.forms.namedItem(\"fileinfo\");\n" +
103+
" form.addEventListener('submit', function (ev) {\n" +
104+
"\n" +
105+
" var oOutput = document.getElementById(\"results\"),\n" +
106+
" oData = new FormData(form);\n" +
107+
" oOutput.innerHTML = \"<br/><h3>Getting results, please wait ...</h3>\";\n" +
108+
" // In case we need to send extra data to the request handler which is UploadServlet in our case\n" +
109+
" oData.append(\"CustomField\", \"This is some extra data\");\n" +
110+
"\n" +
111+
" var oReq = new XMLHttpRequest();\n" +
112+
" oReq.open(\"POST\", \"\", true);\n" +
113+
" oReq.onload = function (oEvent) {\n" +
114+
" if (oReq.status == 200) {\n" +
115+
" // here we update the UI after getting the response results\n" +
116+
" oOutput.innerHTML = oReq.responseText;\n" +
117+
" } else {\n" +
118+
" oOutput.innerHTML = \"Error \" + oReq.status + \" occurred when trying to upload your file.<br \\/>\";\n" +
119+
" }\n" +
120+
" };\n" +
121+
"\n" +
122+
" oReq.send(oData);\n" +
123+
" ev.preventDefault();\n" +
124+
" }, false);\n" +
125+
"</script>\n" +
126+
"\n" +
127+
"\n" +
128+
"</body>\n" +
129+
"</html>\n";
130+
131+
@Override
132+
protected void doGet( HttpServletRequest request, HttpServletResponse response )
133+
throws ServletException, IOException
134+
{
135+
response.setContentType("text/html");
136+
response.setStatus(HttpServletResponse.SC_OK);
137+
response.getWriter().println(uploadForm);
138+
}
139+
140+
@Override
141+
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
142+
throws ServletException, IOException
143+
{
144+
resp.setContentType("text/html");
145+
PrintWriter out = resp.getWriter();
146+
Part part = req.getPart("file");
147+
byte[] uploadedImage = readAllBytes(part.getInputStream());
148+
149+
try {
150+
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:hr/oracle@localhost:1521/orcl");
151+
PreparedStatement stmt = conn.prepareStatement("SELECT image FROM images WHERE is_lucene_similar(image, ?) = 1");
152+
stmt.setBytes(1, uploadedImage);
153+
ResultSet rs = stmt.executeQuery();
154+
155+
int counter = 0;
156+
final int imagesPerRow = 6;
157+
out.println("<table>");
158+
while (rs.next()) {
159+
if (counter % imagesPerRow == 0) {
160+
out.println("<tr>");
161+
}
162+
String base64image = Base64.getEncoder().encodeToString(rs.getBytes(1));
163+
out.println("<td><img width='150' height='150' style='border-radius: 10px;' src=\"data:image/jpeg;base64," + base64image + "\"></td>");
164+
counter++;
165+
if (counter % imagesPerRow == 0) {
166+
out.println("</tr>");
167+
}
168+
169+
}
170+
out.println("</table>");
171+
172+
rs.close();
173+
conn.close();
174+
} catch (Exception e) {
175+
e.printStackTrace();
176+
}
177+
178+
179+
/*out.println(uploadForm);
180+
181+
for (Part part: req.getParts())
182+
{
183+
byte[] uploadedImage = readAllBytes(part.getInputStream());
184+
String base64image = Base64.getEncoder().encodeToString(uploadedImage);
185+
out.println("Uploaded file:<br>");
186+
out.println("<img src=\"data:image/jpeg;base64," + base64image + "\"><br>");
187+
out.println("Similar images:<br>");
188+
189+
try {
190+
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:hr/oracle@localhost:1521/orcl");
191+
PreparedStatement stmt = conn.prepareStatement("SELECT image FROM images WHERE is_lucene_similar(image, ?) = 1");
192+
stmt.setBytes(1, uploadedImage);
193+
ResultSet rs = stmt.executeQuery();
194+
195+
int counter = 0;
196+
while (rs.next()) {
197+
base64image = Base64.getEncoder().encodeToString(rs.getBytes(1));
198+
out.println("<img src=\"data:image/jpeg;base64," + base64image + "\">");
199+
counter++;
200+
if (counter == 4) {
201+
out.println("<br>");
202+
counter = 0;
203+
}
204+
}
205+
206+
rs.close();
207+
conn.close();
208+
} catch (Exception e) {
209+
e.printStackTrace();
210+
}
211+
}*/
212+
}
213+
}
214+
}
215+

0 commit comments

Comments
 (0)
Please sign in to comment.