1
When registering product data in my database it presents the error in getFileType on line 124 follows the error
Line 124
String extensao = nomeDoArquivo.substring(nomeDoArquivo.indexOf('.' + 1));
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
java.lang.String.substring(String.java:1927)
Controler.CadastroProdutos2.getFileType(CadastroProdutos2.java:124)
Controler.CadastroProdutos2.doPost(CadastroProdutos2.java:100)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
HTML
<form action="<c:url value="/produto/salvar" />" method="POST" enctype="multipart/form-data" >
<div class="row">
<div class="col-6 col-md-4"></div>
<div class="col-6 col-md-4"><h2>Cadastro de Produtos</h2></div>
<div class="col-6 col-md-4"></div>
</div>
<div class="container-fluid">
<div class="conteudo_cadastro">
<div class="row">
<div class="col-sm-6 col-md-4">
Nome do produto:<input type="text" id="nome_produto2" name="nome"><br/><br/>
</div>
<div class="col-sm-6 col-md-4">
Descrição:<input type="text" id="descricao" name="descricao"><br/><br/>
</div>
<div class="col-sm-6 col-md-4">
Valor:<input type="text" id="valor" name="valor"><br/><br/>
</div>
</div>
<div class="row">
<div class="col-sm-6 col-md-4">
Cor:<input type="text" id="cor" name="cor"><br/><br/>
</div>
<div class="col-sm-6 col-md-4">
Marca:<input type="text" id="marca" name="marca"><br/><br/>
</div>
<div class="col-sm-6 col-md-4">
Tamanho:<input type="text" id="tamanho" name="tamanho"><br/><br/>
</div>
<div class="col-sm-6 col-md-4">
Parcelas:<input type="text" id="parcelas" name="parcelas"><br/><br/>
</div>
<div class="col-sm-6 col-md-4">
Tecido:<input type="text" id="tecido" name="tecido"><br/><br/>
</div>
<div class="col-sm-6 col-md-4">
<input type="file" name="file" id="file"/> <br/><br/>
</div>
</div>
</div>
</div>
<button type="submit">Cadastrar</button>
</form>
My Servlet responsible for saving data
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int id = 0;
String nome = request.getParameter("nome");
String descricao = request.getParameter("descricao");
double valor = Double.parseDouble(request.getParameter("valor"));
String marca = request.getParameter("marca");
String tamanho = request.getParameter("tamanho");
int parcelas = Integer.parseInt(request.getParameter("parcelas"));
String tecido = request.getParameter("tecido");
Part imagePart = request.getPart("file");
String tipo = getFileType(imagePart);
byte[] conteudo = imagePart == null ? new byte[0] : getBytesFromInputStream(imagePart.getInputStream());
Produtos p = new Produtos(id, nome, descricao, valor, marca, tamanho, parcelas, tecido);
ImagemProdutos im = new ImagemProdutos(tipo, conteudo);
ProdutosDAO.instancia().salvar(p, im);
RequestDispatcher dispatcher =
request.getRequestDispatcher("/produtos/listar");
dispatcher.forward(request, response);
}
private String getFileType(Part part) {
if (part == null) return "";
String partHeader = part.getHeader("content-disposition");
for (String content : partHeader.split(";")) {
String trimmedContent = content.trim();
if (trimmedContent.startsWith("filename")) {
String nomeEntreAspas = trimmedContent.substring(trimmedContent.indexOf('=') + 1);
String nomeDoArquivo = nomeEntreAspas.trim().replace("\"", "");
String extensao = nomeDoArquivo.substring(nomeDoArquivo.indexOf('.' + 1));//erro nessa linha
return extensao;
}
}
return null;
}
nomeDoArquivo.substring(nomeDoArquivo.indexOf('.' + 1))
. One more should be out of the indexnomeDoArquivo.substring(nomeDoArquivo.indexOf('.') + 1)
.– fhofmann