è meu primeiro upload e queria cadastrar um carro e inserir a foto no mesmo jsp, mas não consigo, no meu servlet , alguém tem uma dica de o que devo alterar se é no jsp ou no servlet que realiza a persistência?
é text com imagem
gostaria de inserir no mesmo jsp por exemplo isso eo upload da imagem
Valor 1
Valor 2
Valor 3
tenho um form jsp simple para cadastro de imagem assim
<input type=“submit” id=“upload” name=“upload” tabindex=“2” style="position:absolute; top:20px; left:532px; >
como junto os dois no mesmo jsp? estou utilizando o commons - apache
Na sua servlet vc pega os parametros recebidos pela JSP certo ???
Então eu imagino q vc faça uma condição como essa:
if (fileitem.isFormField()) {
//Aqui vem seus inputs (na ordem em q o JSP manda, normalmente na ordem que estão na JSP)
}else{
//Aqui vem o arquivo
}
Agora vc só precisa pegar seu input no if caso a condição seja verdadeira…Esta um pouco fraco o exemplo não sei se te ajudei …
[/]'s
há blz!! não posso testar aqui mas entendi a lógica já é uma mão na roda.
deve ser isso pq. dava null no parâmetro que eu pegava no servlet acho que justamente por não fazer esta condição. deve resolver.
valeu amigão!!!
dark123
Dezembro 29, 2008, 3:44pm
#4
[quote=Giulliano]Na sua servlet vc pega os parametros recebidos pela JSP certo ???
Então eu imagino q vc faça uma condição como essa:
if (fileitem.isFormField()) {
//Aqui vem seus inputs (na ordem em q o JSP manda, normalmente na ordem que estão na JSP)
}else{
//Aqui vem o arquivo
}
Agora vc só precisa pegar seu input no if caso a condição seja verdadeira…Esta um pouco fraco o exemplo não sei se te ajudei …
[/]'s[/quote]
E se eu faço o upload assim:
[code] <%@page import=“schema.Conexao”%>
<%@page import=“java.sql."%>
<%@page import="java.io . ”%>
<%@page import=“java.util."%>
<%@page import="org.apache.commons.fileupload. ”%>
<%@page import=“org.apache.commons.fileupload.disk.DiskFileItemFactory”%>
<%@page import=“org.apache.commons.fileupload.servlet.ServletFileUpload”%>
<%
String id = request.getParameter("ok");
String contentType = request.getContentType();
if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) {
DataInputStream in = new DataInputStream(request.getInputStream());
int formDataLength = request.getContentLength();
byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;
while (totalBytesRead < formDataLength) {
byteRead = in.read(dataBytes, totalBytesRead, formDataLength);
totalBytesRead += byteRead;
}
String file = new String(dataBytes);
String saveFile = file.substring(file.indexOf("filename=\"") + 10);
saveFile = saveFile.substring(0, saveFile.indexOf("\n"));
saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));
int lastIndex = contentType.lastIndexOf("=");
String boundary = contentType.substring(lastIndex + 1,contentType.length());
int pos;
pos = file.indexOf("filename=\"");
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
int boundaryLocation = file.indexOf(boundary, pos) - 4;
int startPos = ((file.substring(0, pos)).getBytes()).length;
int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;
String filepath = session.getServletContext().getRealPath("/") + "/eventos/"+ saveFile;
FileOutputStream fileOut = new FileOutputStream(filepath);
fileOut.write(dataBytes, startPos, (endPos - startPos));
fileOut.flush();
fileOut.close();
try {
Connection conn = Conexao.getConection();
int codigo = Integer.parseInt(id);
PreparedStatement inserirImagem =
conn.prepareStatement("INSERT INTO img (codT, img) VALUES (?, ?) ");
inserirImagem.setInt(1, codigo);
inserirImagem.setObject(2, saveFile); // itemName);
inserirImagem.execute();
// ok, enviou
} catch(Exception ex) {
ex.printStackTrace();
}
}
%>[/code]
Como posso realizar o teste com if (fileitem.isFormField()) …
Acontece que quando fiz o upload, o parâmetro de texto ficou assim:
Imagem:
O código é este:
index.jsp
<form action="uploadfiles.jsp" method="post" enctype="multipart/form-data">
<input type="hidden" name="oculto" value="1">
<input type="file" name="arquivo">
<input type="text" name="texto">
<input type="submit" value="Enviar">
</form>
uploadfiles.jsp
[code]<%@ page import=“schema.Conexao”%>
<%@ page import=“java.sql.*”%>
<%@page contentType=“text/html;charset=ISO-8859-1”%>
<%@ page import=“org.apache.commons.fileupload.FileItem” %>
<%@ page import=“org.apache.commons.fileupload.servlet.ServletFileUpload” %>
<%@ page import=“org.apache.commons.fileupload.disk.DiskFileItemFactory” %>
<%@ page import=“java.util.List” %>
<%@ page import=“java.util.Iterator” %>
<%@ page import=“java.io.File” %>
<%
out.println("");
if (ServletFileUpload.isMultipartContent(request))
{
out.println(“
Seu upload ”);
ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
String uploadDir = application.getRealPath(request.getServletPath());
uploadDir = (new java.io.File(uploadDir)).getParent()+"\UploadedFiles\";
try {
List fileItemsList = servletFileUpload.parseRequest(request);
Iterator it = fileItemsList.iterator();
while (it.hasNext())
{
FileItem fileItem = (FileItem)it.next();
if (fileItem.isFormField())
{
out.println(fileItem.getFieldName()+" - "+fileItem.getString()+"<br>");
}
else
{
fileItem.write(new File( uploadDir+"\\"+(new File(fileItem.getName()).getName())));
out.println("<br><b>Arquivo</b><br><br><img src=UploadedFiles/"+fileItem.getName()+" /> <br><br>Arquivo enviado com sucesso!<br><br>");
String id = fileItem.getString();
int codigo = Integer.parseInt(id);
Connection conn = Conexao.getConection();
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO teste_upload (codigoTopic, url_image) VALUES ( ?, ? )");
pstmt.setInt(1, codigo);
pstmt.setObject(2, fileItem.getName());
pstmt.execute();
out.println("Adicionado ao banco de dados: "+id+" e "+fileItem.getName());
conn.close();
}
}
}
catch (Exception ex) {
out.println(ex.getMessage());
out.println("<br>Não foi possível cadastrar os dados no banco de dados!<br>"+ex);
}
}
else
out.println(“Nenhum arquivo encontrado!.”);
out.println("");
%>
[/code]
Antes eu usava este exemplo aqui:
http://www.javafree.org/viewtopic.jbb?t=871583#163202
só que não pudia enviar imagens pelo Internet Explorer.
Com esse novo exemplo envia mas normalmente com todos os browsers, captura o parêmtro, como é mostrado na imagem, só que quando ele é setado no banco de dados, vai como caracteres desconhecidos…
O que posso fazer para upar um arquivo em qualquer navegador capturando outros parâmetros?
Agradeço a ajuda.
[]s