+ error messages for file upload

This commit is contained in:
Julian Hinxlage 2019-05-21 16:55:35 +02:00
parent 0f25f4e2d9
commit 243eb1c7f9
9 changed files with 137 additions and 27 deletions

View File

@ -0,0 +1,14 @@
package de.hsel.spm.baudas.web;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum ErrorCode {
FILE_NOT_FOUND ("Die Hochgeladene Datei konnte nicht gefunden werden"),
EMPTY_FILE ("Die Hochgeladene Datei ist leer"),
INVALID_FORMAT("Die Hochgeladene Datei hat ein falsches Format");
private String message;
}

View File

@ -1,6 +1,7 @@
package de.hsel.spm.baudas.web; package de.hsel.spm.baudas.web;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import weka.core.converters.CSVLoader;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.MultipartConfig;
@ -32,15 +33,57 @@ public class Upload extends HttpServlet {
private static final long serialVersionUID = 14144111845151L; private static final long serialVersionUID = 14144111845151L;
private boolean checkFormat(InputStream stream) {
CSVLoader loader = new CSVLoader();
try {
loader.setSource(stream);
return loader.getDataSet() != null;
} catch (IOException e) {
return false;
}
}
@Override @Override
protected void doPost(@NotNull HttpServletRequest req, HttpServletResponse resp) protected void doPost(@NotNull HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException { throws ServletException, IOException {
req.setCharacterEncoding(StandardCharsets.UTF_8.name()); req.setCharacterEncoding(StandardCharsets.UTF_8.name());
Part filePart = req.getPart("file"); Part filePart = req.getPart("file");
if(filePart == null){
resp.sendRedirect("error.jsp?code=" + ErrorCode.FILE_NOT_FOUND);
return;
}
if(filePart.getSubmittedFileName() == null){
resp.sendRedirect("error.jsp?code=" + ErrorCode.FILE_NOT_FOUND);
return;
}
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();
if(fileName == null){
resp.sendRedirect("error.jsp?code=" + ErrorCode.FILE_NOT_FOUND);
return;
}
InputStream inputStream = filePart.getInputStream(); InputStream inputStream = filePart.getInputStream();
if(inputStream == null){
resp.sendRedirect("error.jsp?code=" + ErrorCode.FILE_NOT_FOUND);
return;
}
if(inputStream.available() == 0) {
resp.sendRedirect("error.jsp?code=" + ErrorCode.EMPTY_FILE);
return;
}
if(!checkFormat(inputStream)){
resp.sendRedirect("error.jsp?code=" + ErrorCode.INVALID_FORMAT);
return;
}else{
inputStream = filePart.getInputStream();
}
Path path = Data.add(fileName); Path path = Data.add(fileName);
if (!Files.exists(path)) { if (!Files.exists(path)) {
@ -49,6 +92,7 @@ public class Upload extends HttpServlet {
Files.copy(inputStream, path, StandardCopyOption.REPLACE_EXISTING); Files.copy(inputStream, path, StandardCopyOption.REPLACE_EXISTING);
resp.sendRedirect(""); resp.sendRedirect("");
} }
} }

View File

@ -0,0 +1,13 @@
<%@include file="head.jsp"%>
<!--Navbar-->
<div class="navbar-fixed">
<nav class="nav-extended blue-grey darken-3 white-text row">
<a href="#" class="brand-logo hide-on-small-and-down center">BauDas</a>
<!--Navbar Items-->
<div class="nav-wrapper col 2 right">
</div>
</nav>
</div>
<br>

36
src/main/webapp/error.jsp Normal file
View File

@ -0,0 +1,36 @@
<%--
Created by IntelliJ IDEA.
User: julian
Date: 21.05.19
Time: 14:21
To change this template use File | Settings | File Templates.
--%>
<%@ page import="java.nio.charset.StandardCharsets" %>
<%@ page import="de.hsel.spm.baudas.web.ErrorCode" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@include file="emptyHeader.jsp"%>
<% response.setCharacterEncoding(StandardCharsets.UTF_8.name()); %>
<% request.setCharacterEncoding(StandardCharsets.UTF_8.name()); %>
<%
String code = request.getParameter("code");
if(code != null){
ErrorCode errorCode = ErrorCode.valueOf(code);
%>
<div class="row">
<div class="col s4 push-s4">
<div class="card-panel red darken-1">
<h5 class="white-text center-align">
<%= errorCode.getMessage()%>
</h5>
</div>
</div>
</div>
<%
}
%>
<%@include file="theming.jsp"%>

View File

@ -6,10 +6,8 @@
<!--Script für Materlialize--> <!--Script für Materlialize-->
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script> <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<script> <%@include file="theming.jsp"%>
M.AutoInit();
</script>
<script src="js/cache.js"></script> <script src="js/cache.js"></script>

21
src/main/webapp/head.jsp Normal file
View File

@ -0,0 +1,21 @@
<% response.setCharacterEncoding(StandardCharsets.UTF_8.name()); %>
<% request.setCharacterEncoding(StandardCharsets.UTF_8.name()); %>
<!DOCTYPE html>
<html lang="de">
<head>
<title>BauDas</title>
<!--Import Google Icon Font-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!--Import materialize.css-->
<link type="text/css" rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"
media="screen,projection"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.css"
integrity="sha256-aa0xaJgmK/X74WM224KMQeNQC2xYKwlAt08oZqjeF0E=" crossorigin="anonymous"/>
<meta charset="UTF-8">
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=utf-8">
<!--Let browser know website is optimized for mobile-->
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>

View File

@ -1,6 +1,6 @@
<%@ page import="java.nio.charset.StandardCharsets" %> <%@ page import="java.nio.charset.StandardCharsets" %>
<%@ page contentType="text/html;charset=UTF-8" %> <%@ page contentType="text/html;charset=UTF-8" %>
<%@include file="header.jsp"%> <%@include file="menu.jsp"%>
<% response.setCharacterEncoding(StandardCharsets.UTF_8.name()); %> <% response.setCharacterEncoding(StandardCharsets.UTF_8.name()); %>
<% request.setCharacterEncoding(StandardCharsets.UTF_8.name()); %> <% request.setCharacterEncoding(StandardCharsets.UTF_8.name()); %>

View File

@ -1,26 +1,6 @@
<% response.setCharacterEncoding(StandardCharsets.UTF_8.name()); %>
<% request.setCharacterEncoding(StandardCharsets.UTF_8.name()); %>
<!DOCTYPE html>
<html lang="de">
<head>
<title>BauDas</title>
<!--Import Google Icon Font-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!--Import materialize.css-->
<link type="text/css" rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"
media="screen,projection"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.css"
integrity="sha256-aa0xaJgmK/X74WM224KMQeNQC2xYKwlAt08oZqjeF0E=" crossorigin="anonymous"/>
<meta charset="UTF-8">
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=utf-8">
<!--Let browser know website is optimized for mobile--> <%@include file="head.jsp"%>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<body class="blue-grey lighten-5">
<!--Navbar--> <!--Navbar-->
<div class="navbar-fixed"> <div class="navbar-fixed">
<nav class="nav-extended blue-grey darken-3 white-text row"> <nav class="nav-extended blue-grey darken-3 white-text row">
@ -109,4 +89,4 @@
</button> </button>
</li> </li>
</form> </form>
</ul> </ul>

View File

@ -0,0 +1,4 @@
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<script>
M.AutoInit();
</script>