Erro ao abrir arquivo anexado

4 respostas
java
T

Bom dia Pessoal!

Não estou conseguindo abrir o arquivo que eu anexei na aplicação, o banco é sqlserver 2008, posso anexar .doc, pdf e xls, ppt. Ao tentar abrir o arquivo que anexei o eclipse (NEON 4.6.0) apresenta o erro abaixo:

08:45:50,765 ERROR [STDERR] java.io.FileNotFoundException: C:\meusistema\formulario\evento\Formulario_20170126141915_294.doc (O sistema não pode encontrar o caminho especificado)
08:45:50,766 ERROR [STDERR] 	at java.io.FileInputStream.open(Native Method)
08:45:50,766 ERROR [STDERR] 	at java.io.FileInputStream.<init>(Unknown Source)
08:45:50,766 ERROR [STDERR] 	at br.com.meusistema.empregado.presentation.AbrirArquivo.doGet(AbrirArquivo.java:49)
08:45:50,766 ERROR [STDERR] 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
08:45:50,766 ERROR [STDERR] 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
08:45:50,766 ERROR [STDERR] 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
08:45:50,766 ERROR [STDERR] 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
08:45:50,766 ERROR [STDERR] 	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
08:45:50,766 ERROR [STDERR] 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
08:45:50,768 ERROR [STDERR] 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
08:45:50,769 ERROR [STDERR] 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
08:45:50,769 ERROR [STDERR] 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
08:45:50,769 ERROR [STDERR] 	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
08:45:50,769 ERROR [STDERR] 	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
08:45:50,769 ERROR [STDERR] 	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
08:45:50,769 ERROR [STDERR] 	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
08:45:50,769 ERROR [STDERR] 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
08:45:50,769 ERROR [STDERR] 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
08:45:50,769 ERROR [STDERR] 	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
08:45:50,769 ERROR [STDERR] 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
08:45:50,769 ERROR [STDERR] 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
08:45:50,769 ERROR [STDERR] 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
08:45:50,769 ERROR [STDERR] 	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
08:45:50,769 ERROR [STDERR] 	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
08:45:50,769 ERROR [STDERR] 	at java.lang.Thread.run(Unknown Source)
08:45:50,770 ERROR [[AbrirArquivo]] Servlet.service() for servlet AbrirArquivo threw exception
java.lang.NullPointerException
	at br.com.meusistema.empregado.presentation.AbrirArquivo.doGet(AbrirArquivo.java:76)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

O erro acontece ao entrar neste IF:

if(extencao.equals("doc") || extencao.equals("docx") ){
            	response.setContentType("application/msword");   
            	
            }else if( extencao.equals("xls") || extencao.equals("xlsx") ){
            	response.setContentType("application/vnd.ms-excel");   
            	
            }else if( extencao.equals("ppt") || extencao.equals("pptx") ){
            	response.setContentType("application/vnd.ms-powerpoint");   
            	
            }else if( extencao.equals("pdf") ){
            	response.setContentType("application/pdf");	        	
            }

segue a classe inteira:

public void doGet(HttpServletRequest request, HttpServletResponse response)
    	    throws ServletException, IOException{
    		 
    		 String nomeArquivo = request.getParameter("arquivo");		 
    		 String tipoDiretorio = request.getParameter("tipoDiretorio");
    		 
    		 String caminhoDiretorio = null;
    		 
    		 if(tipoDiretorio.equals("1")){
    			 caminhoDiretorio = "C:/sispaev/formulario/evento/";
    		 }else{
    			 caminhoDiretorio = "C:/sispaev/formulario/empregado/";
    		 }
    		 
    		 String extencaoArquivoAUX[] = nomeArquivo.split("[.]");
    	 	String extencao = extencaoArquivoAUX[extencaoArquivoAUX.length - 1];
    	 	
        	// Obtem o contexto 
            ServletContext context = getServletContext();
            
            File arquivo = new File(caminhoDiretorio + nomeArquivo);
            
            byte[] arquivoByte = null;
            
            try {
            	
            	FileInputStream fis = new FileInputStream(arquivo);
            	ByteArrayOutputStream baos = new ByteArrayOutputStream();   
                byte[] buffer = new byte[8192];   
                int bytesRead = 0;   
                while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {   
                    baos.write(buffer, 0, bytesRead);   
                } 
                
                arquivoByte = baos.toByteArray();
            	
            } catch (Exception e) {   
                e.printStackTrace();   
            } 
            
            if(extencao.equals("doc") || extencao.equals("docx") ){
            	response.setContentType("application/msword");   
            	
            }else if( extencao.equals("xls") || extencao.equals("xlsx") ){
            	response.setContentType("application/vnd.ms-excel");   
            	
            }else if( extencao.equals("ppt") || extencao.equals("pptx") ){
            	response.setContentType("application/vnd.ms-powerpoint");   
            	
            }else if( extencao.equals("pdf") ){
            	response.setContentType("application/pdf");	        	
            }
            
            response.setContentLength(arquivoByte.length);
            response.addHeader("Content-Disposition", "attachment; filename=" + "\""+ nomeArquivo + "\""); 
            
            ServletOutputStream ouputStream = response.getOutputStream();   
            ouputStream.write(arquivoByte, 0, arquivoByte.length);   
            ouputStream.flush();   
            ouputStream.close(); 
    		 
    	 }

Alguém pode me ajudar?

4 Respostas

S

Na verdade o seu StackTrace está apontando que o erro acontece ao tentar instanciar o FileInputStream:

java.io.FileNotFoundException: C:\meusistema\formulario\evento\Formulario_20170126141915_294.doc (O sistema não pode encontrar o caminho especificado) <-- exceção lançada ao invocar o método open
 	at java.io.FileInputStream.open(Native Method)    <-- Método open invocado pelo construtor
 	at java.io.FileInputStream.<init>(Unknown Source)    <-- Construtor do FileInputStream invocado pelo método doGet
	at br.com.meusistema.empregado.presentation.AbrirArquivo.doGet(AbrirArquivo.java:49    <-- linha 49 do arquivo 'AbrirArquivo.java'

Ou seja, você está tentando abrir um arquivo que não existe no disco.

T

staroski, obrigado pelo retorno!

O arquivo está no disco, anexo ele e vejo ele no banco de dados, só que ao clicar no link da aplicação para abrir o arquivo que anexei o erro acontece. Sabe me dizer o que posso fazer para corrigir?

abaixo é o erro apresentado no Browser:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
	br.com.meusistema.empregado.presentation.AbrirArquivo.doGet(AbrirArquivo.java:77)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
S

Banco de dados é uma coisa, sistema de arquivos do sistema operacional é outra.

A exceção está bem clara, o caminho “C:\meusistema\formulario\evento\Formulario_20170126141915_294.doc” não existe no seu servidor.

T

staroski,

É que sou leigo em desenvolvimento. Não consegui enxergar que era preciso criar a pasta no servidor.
Sua ajuda foi excelente, aprendi mais um pouco também com seus comentários no código.

Problema resolvido!

Valeu staroski !!!

Criado 27 de janeiro de 2017
Ultima resposta 27 de jan. de 2017
Respostas 4
Participantes 2