Upload arquivos em jsp

12 respostas
M

Estou iniciando nessa plataforma jsp!
Estou com um problema quando faço o upload...
Quando eu executo a funcao atravez do botao "submit" ele nao passa os parametros para o arquivo jsp!!!
Quando retiro o comando enc-type ele passa os parametros do combobox e do radio button mas ele nao carregar o arquivo!!!

carregararquivo.jsp

<html> 
    <head> 
    </head>     
    <body>     
    <center><h3><u>Upload de Arquivos</u></h3></center>
      <form ACTION="upload.jsp" ENCTYPE="MULTIPART/FORM-DATA" method="POST"><br>
      URA: 
          <select name="cmbbox" id="cmbbox">
	      <option selected value="nenhum">Selecione uma ura...</option>
              <option value="gmk">GMK</option>
	      <option value="avaya">AVAYA</option>
  	      <option value="uratec">URATEC</option>
	      <option value="dialout">DIALOUT</option>
 	      <option value="ura_paa">PAA</option>
	      <option value="ura_ri">RI</option>
          </select>
	  <br><br>
          Tipo:          
          <input type="radio" name="radioteste" id="radioteste" value="portas">Portas  
          <input type="radio" name="radioteste" id="radioteste" value="fluxos" >Fluxos<br><br>
          <INPUT TYPE="file" name="filename"> <br> 
          <INPUT TYPE="SUBMIT" name="Enviar" value="Enviar"> 
           
      </form>     
    </body> 
</html>

upload.jsp

<%@ page import="java.io.*"%> 
<% 
String valorcombo =  request.getParameter("cmbbox");
String valorradio =  request.getParameter("radioteste");
String savePath = "\\C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\Site\\"+valorcombo+"\\"+valorradio+"\\";

String filename = "";

ServletInputStream in = request.getInputStream(); 

    byte[] line = new byte[128]; 
    int i = in.readLine(line, 0, 128); 
    int boundaryLength = i - 2; 
    String boundary = new String(line, 0, boundaryLength); 
    
    while(i != -1) { 
    
       String newLine = new String(line, 0, i); 
        
             if(newLine.startsWith("Content-Disposition: form-data; name=\"")) { 
              
                String s = new String(line, 0, i-2); 
                int pos = s.indexOf("filename=\""); 
              
                                     if(pos != -1) { 
                                     
                                           String filepath = s.substring(pos+10, s.length() - 1); 
                                            
                                           pos = filepath.lastIndexOf("\\"); 
                                            
                                           if(pos != -1) { 
                                            
                                              filename = filepath.substring(pos + 1); 
                                              
                                           } else { 
                                            
                                              filename = filepath;                                               
                                           }                                             
                                           i = in.readLine(line, 0, 128); 
                                           i = in.readLine(line, 0, 128); 
                                           i = in.readLine(line, 0, 128); 
                                        
                                           ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
                                           newLine = new String(line, 0, i); 
                                            
                                           while(i != -1 && !newLine.startsWith(boundary)) { 
                                            
                                              buffer.write(line, 0, i); 
                                              i = in.readLine(line, 0, 128); 
                                              newLine = new String(line, 0, i); 
                                              
                                           } 
                                           try { 
                                               RandomAccessFile f = new RandomAccessFile(savePath + filename, "rw"); 
                                               byte[] bytes = buffer.toByteArray(); 
                                               f.write(bytes, 0, bytes.length-2); 
                                               f.close(); 
 					       out.println("Arquivo carregado");	
                                          } catch (Exception e) { 
                                               out.println("nao foi possivel fazer o upload do arquivo");
 					  }                                                                       
                                     }                      
            } 
          
       i = in.readLine(line, 0 ,128);     
    } 
%>

Me ajudem por favor!!!
abraços!

12 Respostas

C

Olá MMathias,

No arquivo upload.jsp você não deverá utilizar o request e sim o MultipartRequest

MultipartRequest multi= new MultipartRequest(request,"diretorio a salvar" ); multi.getParameter("campo");

Valeu

M

Olá!

Eu tentei fazer o que voce disse ,mas deu um erro na linha 4!
Sera que tem que importar alguma biblioteca?

<%@ page import="java.io.*"%> 
<% 
String savePath="\\C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\Site\\";
MultipartRequest multi = new MultipartRequest(request,savePath);

String valorcombo =  multi.getParameter("cmbbox");
String valorradio =  multi.getParameter("radioteste");
out.println("valorcombo");
savePath =savePath+valorcombo+"\\"+valorradio+"\\";

valeu!!

C

você precisa importar a biblioteca cos.jar

M

Agora ta dando erro na linha 7!!

<%@ page import="java.io.*"%>
<%@ page import="cos"%> 
<% 
String savePath="\\C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\webapps\\Site\\";
MultipartRequest multi = new MultipartRequest(request,savePath);

String valorcombo =  multi.getParameter("cmbbox");
String valorradio =  multi.getParameter("radioteste");
out.println("valorcombo");
savePath += valorcombo+"\\"+valorradio+"\\";
C

MMathias,

qual é a linha 7 e qual o erro??

M

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 7 in the generated java file
The import cos cannot be resolved

An error occurred at line: 5 in the jsp file: /upload.jsp

MultipartRequest cannot be resolved to a type

2: <%@ page import=cos%>

3: <%

4: String savePath="\C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\Site\";

5: MultipartRequest multi = new MultipartRequest(request,savePath);

6:

7: String valorcombo =  multi.getParameter(“cmbbox”);

8: String valorradio =  multi.getParameter(“radioteste”);
An error occurred at line: 5 in the jsp file: /upload.jsp

MultipartRequest cannot be resolved to a type

2: <%@ page import=cos%>

3: <%

4: String savePath="\C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\Site\";

5: MultipartRequest multi = new MultipartRequest(request,savePath);

6:

7: String valorcombo =  multi.getParameter(“cmbbox”);

8: String valorradio =  multi.getParameter(“radioteste”);
C

MMathias,

o import que você está fazendo está incorreto....você primeiro precisa baixar a bibloteca cos.jar e coloca-la dentro da pasta lib que está localizada dentro de WEB-INF. Vou enviar para seu e-mail esta biblioteca certo.

E abaixo segue um exemplo de como fazer o upload.

&lt;form action=&quot;upload.jsp&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;
			  	
					&lt;table&gt;					   
					   &lt;tr&gt;
						&lt;td align=&quot;right&quot;&gt;Documento/Arquivo &#58; &lt;/td&gt;
						&lt;td align=&quot;left&quot;&gt;&lt;input type=&quot;file&quot; name=&quot;documento&quot; validar=&quot;texto&quot; nome=&quot;Arquivo&quot; size=&quot;50&quot; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;input type=&quot;submit&quot; value=&quot;enviar&quot; /&gt;&lt;/td&gt;
					  &lt;/tr&gt;
&lt;/form&gt;

E na página upload.jsp

&lt;%@ page import=&quot;com.oreilly.servlet.MultipartRequest&quot; %&gt;
&lt;%@ page import=&quot;java.util.*&quot; %&gt;
&lt;%@ page import=&quot;java.io.*&quot; %&gt;
&lt;%
String pasta = getServletContext&#40;&#41;.getRealPath&#40;&quot;/&quot;&#41;+&quot;/anexos/&quot;;
String valorcombo = &quot;&quot;;
String valorradio  = &quot;&quot;;
MultipartRequest mpr = new MultipartRequest&#40; request, pasta, 10240000&#41;;

File arquivo = mpr.getFile&#40;&quot;documento&quot;&#41;;

 if&#40; arquivo != null &#41;&#123;

    valorcombo =  mpr.getParameter&#40;&quot;cmbbox&quot;&#41;;
 valorradio =  mpr.getParameter&#40;&quot;radioteste&quot;&#41;; 
&#125;
%&gt;

Espero ter ajudado

M

Eu nao sei onde eu estou errando...pois eu fiz o que vc falou!!!
eu nao sei o que os comandos significam apenas coloquei...eu nao estou usando uma servlet!

esse é o meu upload.jsp

&lt;%@ page import=&quot;com.oreilly.servlet.MultipartRequest&quot; %&gt; 
&lt;%@ page import=&quot;java.util.*&quot; %&gt; 
&lt;%@ page import=&quot;java.io.*&quot; %&gt; 
&lt;%
String valorcombo = &quot;&quot;; 
String valorradio  = &quot;&quot;; 
String savePath = getServletContext&#40;&#41;.getRealPath&#40;&quot;/&quot;&#41;; 

MultipartRequest mpr = new MultipartRequest&#40; request, savePath, 10240000&#41;; 
File arquivo = mpr.getFile&#40;&quot;filename&quot;&#41;;

if&#40; arquivo != null &#41;&#123; 

    valorcombo =  mpr.getParameter&#40;&quot;cmbbox&quot;&#41;; 
    valorradio =  mpr.getParameter&#40;&quot;radioteste&quot;&#41;; 
    savePath += valorcombo+&quot;\\&quot;+valorradio+&quot;\\&quot;;
&#125;

String filname = &quot;&quot;;
ServletInputStream in = request.getInputStream&#40;&#41;; 
    byte&#91;&#93; line = new byte&#91;128&#93;; 
    int i = in.readLine&#40;line, 0, 128&#41;; 
    int boundaryLength = i - 2; 
    String boundary = new String&#40;line, 0, boundaryLength&#41;;     
    while&#40;i != -1&#41; &#123;     
       String newLine = new String&#40;line, 0, i&#41;;         
             if&#40;newLine.startsWith&#40;&quot;Content-Disposition&#58; form-data; name=\&quot;&quot;&#41;&#41; &#123;               
                String s = new String&#40;line, 0, i-2&#41;; 
                int pos = s.indexOf&#40;&quot;filname=\&quot;&quot;&#41;;               
                           if&#40;pos != -1&#41; &#123;                                    
                                 String filepath = s.substring&#40;pos+10, s.length&#40;&#41; - 1&#41;; 
                                 pos = filepath.lastIndexOf&#40;&quot;\\&quot;&#41;; 
                                 if&#40;pos != -1&#41; &#123;                                             
                                   filname = filepath.substring&#40;pos + 1&#41;;                                               
                                 &#125; else &#123;                                             
                                   filname = filepath;                                               
                                 &#125;                                             
                                 i = in.readLine&#40;line, 0, 128&#41;; 
                                 i = in.readLine&#40;line, 0, 128&#41;; 
                                 i = in.readLine&#40;line, 0, 128&#41;;                                         
                                 ByteArrayOutputStream buffer = new ByteArrayOutputStream&#40;&#41;; 
                                 newLine = new String&#40;line, 0, i&#41;;                                             
                                 while&#40;i != -1 &amp;&amp; !newLine.startsWith&#40;boundary&#41;&#41; &#123;                                             
                                   buffer.write&#40;line, 0, i&#41;; 
                                   i = in.readLine&#40;line, 0, 128&#41;; 
                                   newLine = new String&#40;line, 0, i&#41;;                                               
                                 &#125; 
                                 try &#123; 
                                   RandomAccessFile f = new RandomAccessFile&#40;savePath + filname, &quot;rw&quot;&#41;; 
                                   byte&#91;&#93; bytes = buffer.toByteArray&#40;&#41;; 
                                   f.write&#40;bytes, 0, bytes.length-2&#41;; 
                                   f.close&#40;&#41;; 
                                   out.println&#40;&quot;Arquivo carregado&quot;&#41;;	
                                 &#125;catch &#40;Exception e&#41; &#123; 
                                   out.println&#40;&quot;nao foi possivel fazer o upload do arquivo&quot;&#41;;
 		                 &#125;                                                                       
                      &#125;                      
            &#125; 
          
       i = in.readLine&#40;line, 0 ,128&#41;;     
    &#125; 
%&gt;
esse é o carregararquivo.jsp
&lt;html&gt; 
    &lt;head&gt; 
    &lt;/head&gt;     
    &lt;body&gt;     
    &lt;center&gt;&lt;h3&gt;&lt;u&gt;Upload de Arquivos&lt;/u&gt;&lt;/h3&gt;&lt;/center&gt;
      &lt;form ACTION=&quot;upload.jsp&quot; ENCTYPE=&quot;MULTIPART/FORM-DATA&quot; method=&quot;POST&quot;&gt;&lt;br&gt;
      URA&#58;&amp;nbsp;
          &lt;select name=&quot;cmbbox&quot; id=&quot;cmbbox&quot;&gt;
	      &lt;option selected value=&quot;nenhum&quot;&gt;Selecione uma ura...&lt;/option&gt;
              &lt;option value=&quot;gmk&quot;&gt;GMK&lt;/option&gt;
	      &lt;option value=&quot;avaya&quot;&gt;AVAYA&lt;/option&gt;
  	      &lt;option value=&quot;uratec&quot;&gt;URATEC&lt;/option&gt;
	      &lt;option value=&quot;dialout&quot;&gt;DIALOUT&lt;/option&gt;
 	      &lt;option value=&quot;ura_paa&quot;&gt;PAA&lt;/option&gt;
	      &lt;option value=&quot;ura_ri&quot;&gt;RI&lt;/option&gt;
          &lt;/select&gt;
	  &lt;br&gt;&lt;br&gt;
          Tipo&#58;          
          &lt;input type=&quot;radio&quot; name=&quot;radioteste&quot; id=&quot;radioteste&quot; value=&quot;portas&quot;&gt;Portas&amp;nbsp; 
          &lt;input type=&quot;radio&quot; name=&quot;radioteste&quot; id=&quot;radioteste&quot; value=&quot;fluxos&quot; &gt;Fluxos&lt;br&gt;&lt;br&gt;
          &lt;input type=&quot;file&quot; name=&quot;filename&quot; validar=&quot;texto&quot; nome=&quot;Arquivo&quot; size=&quot;50&quot; /&gt;
          &lt;br&gt; 
          &lt;INPUT TYPE=&quot;SUBMIT&quot; name=&quot;Enviar&quot; value=&quot;Enviar&quot;&gt; 
           
      &lt;/form&gt;     
    &lt;/body&gt; 
&lt;/html&gt;

eu nao tinha uma web-inf com a pasta lib dentro...coloquei depois de vc ter falado...mas como o programa sabe onde procurar a lib?!?!

ta dando erro na linha onde vc declara o mpr

valeu abraços!!!

C

você colocou o arquivo cos.jar dentro da pasta lib

M

aham!

C

MMathias,

Acho que antes de você iniciar uma aplicação web em java primeiro você tem que entender como funciona a estrutura de diretórios e o que deve conter cada diretório. abaixo segue dois link’s que explicam como funciona

http://www.javafree.org/javabb/viewtopic.jbb?t=1407
http://www.linhadecodigo.com.br/artigos.asp?id_ac=765

Siga esta estrutura de diretórios para todas as suas aplicações web.
PS: WEB-INF é maiúscula e necessita ter o arquivo web.xml dentro dela

M

Acabei de ler!!!
Só que a utilizacao do xml é só pra quando eu tiver uma servlet né?!?!
pq ele é configurado para chamar a servlet passando parametros senao me engano!
mas eu nao tenho uma servlet…
eu tava querendo fazer tudo atraves de jsp…
é possivel??
a minha estrutura ta certa…

pastas_auxiliares/

arquivos.jsp

WEB-INF/
-----/lib

Como nao tenho .class nem .java nao tem necessidade criar outras pastas
ne?

Valeuuu

Criado 30 de julho de 2007
Ultima resposta 31 de jul. de 2007
Respostas 12
Participantes 2