Trouble Servlet

2 respostas
pedroroxd

Fala pessoal...

O problema eh o seguinte..
Estou gravando informacoes no banco de dados, e colocando uma imagem no servidor...
Seperadamente eu estou conseguindo fazer isso, mas nao estou conseguindo fazer os 2 juntos...

Meu JSP:

//Essa daqui eu consigo colocar os dados no servidor
<form action="adicionaRoupa">
	Main: <input type="text" name="MAIN" /><br />
	Marca: <input type="text" name="Marca" /><br />
	Cor: <input type="text" name="Cor" /><br />
	Preco: <input type="text" name="Preco" /><br />
<input type="submit" value="Gravar" />
</form>

//Com essa daki eu consigo colocar as imagens no servidor
# <% String id = "1"; %>  
 <form action="upload" method="post" ENCTYPE="multipart/form-data">  
     <input type="hidden" name="id" value="<%=id%>">  
 	<input type="file" name="file" id="file">  
 	<input type="submit" value="Enviar">  
 </form>

Mas eu nao estou conseguindo fazer os dois ao mesmo tempo..
No final da servlet upload estou colocando o codigo da servlet adicionaRoupa...

Mais ou menos assim:
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	response.setContentType("text/html;charset=UTF-8");
.
.
.
FileOutputStream fileOut = new FileOutputStream(filepath);  
                 fileOut.write(dataBytes, startPos, (endPos - startPos));  
                 fileOut.flush();  
                 fileOut.close();  
                 //Aqui termina de jogar o arquivo no servidor
                 
                 //Aki comesso a pegar os parametros para gravar
                // buscando os parâmetros no request
         		String MAIN = request.getParameter("MAIN");
         		String Marca = request.getParameter("Marca");

Mas o grande problema:
Como eh post, a url fica soh http://localhost:8080/Programa/upload
Sem os parametros...

Resultado final: Os parametros sao nulos, entao ele apenas grava a imagem no servidor...

2 Respostas

pedroroxd

Se eu tiro o method="post" e faco isso:

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    	this.doPost(request, response);
    }
E no doPost:
@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

        //metodo para jogar imagem no servidor
        processRequest(request, response);
        
        //buscando os parâmetros no request
 	String MAIN = request.getParameter("MAIN");
 	.
 	.
 	.
 	//Inseri dados no banco de dados
    }
Aqui estah o codigo que coloca a imagem no servidor:
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	response.setContentType("text/html;charset=UTF-8");
        
        PrintWriter out = response.getWriter();

        try {
      
     File dir = new File(getServletContext().getRealPath("/")+ "Catalogo");   
   
     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 = dir+ "/" +saveFile;  
                 
              	FileOutputStream fileOut = new FileOutputStream(filepath);  
                 fileOut.write(dataBytes, startPos, (endPos - startPos));  
                 fileOut.flush();  
                 fileOut.close();       
                 
          }    
        } finally { 
            out.close();	
        }
    }
Tambem nao da certo.. Acho que eh por causa disso:
DataInputStream in = new DataInputStream(request.getInputStream());

Com outros parametros, o request nao eh somente a imagem...

WellingtonRamos

E se você usasse um form para os dados e outro para a imagem? Na submissão fizesse um javascript com form01.submit() seguido de form02.submit()

[EDIT] Repensando no que eu escrevi, acho que talvez não funcione… [/EDIT]

Criado 6 de maio de 2011
Ultima resposta 6 de mai. de 2011
Respostas 2
Participantes 2