Como abrir um arquivo de qlquer extensao: *.txt , *.pdf, *.doc via browser

1 resposta
robertoJames

Boa noite pessoal,

estou tentando abrir um arquivo que esteja dentro do meu servidor para ser lido pelo cliente via browser. Estou tentando da forma abaixo:

public void abrirDocumento() throws FileNotFoundException, IOException {
		
		  try{  
              
	              
	               
	             BufferedReader br = new BufferedReader(new FileReader(getDiagnosticoDocs().getUrl()));  
	             while(br.ready()){  
	                 String linha = br.readLine();  
	                 System.out.println(linha);  
	             }  
	             br.close();  
	         }catch(IOException ioe){  
	             ioe.printStackTrace();  
	         } 
			
			}

onde eu tenho um datatable, e a pessoa clica no link “abrir documento” e abre o documento especifico daquela linha.

<rich:column>
				<f:facet name="header">
					<h:outputText value="Ações" />
				</f:facet>
				 <a href="#" onclick="">Abrir doc</a>
				 
					&nbsp;&nbsp;
				<h:commandLink value="Alterar" action="alterarDiagnosticoDocs">
					<f:setPropertyActionListener value="#{document}"
						target="#{diagnosticoDocsBean.diagnosticoDocs}" />
				</h:commandLink>

Como eu faço isso ?

1 Resposta

araujo921

Olá,

primeiro você não pode simplesmente querer abrir um arquivo via browser, dependendo do tipo de arquivo, você precisará que o browser tenha uma aplicação associada ao tipo mime do arquivo. Por exemplo, no caso de um arquivo pdf, você precisa que o browser tenha uma aplicação associada ao tipo mime application/pdf. Caso o browser não tenha um aplicação associada para o tipo mime application/pdf, então o usuário terá que baixar o arquivo e abrir ele mesmo.

Agora no caso de você está querendo ler o arquivo no servidor para enviar pro cliente, então você pode fazer alguma coisa mais ou menos assim no seu método doGet ou doPost, aqui vamos usar doGet:

...

@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		String dirName = request.getParameter("dirName");
		String fileName = request.getParameter("fileName");
		
		// vamos assumir que o tipo de arquivo seja um PDF
		String fileType = request.getParameter("fileType");
		
		File file = new File(dirName, fileName);
		FileInputStream fileInputStream = new FileInputStream(file);		

		// configura os cabeçalhos da resposta
		
		response.setContentType(getMimeType(fileType));
		response.setContentLength(fileInputStream.available());
		response.setHeader("Content-Disposition", "attachment; filename=\""+fileName+"\"");
		
		OutputStream out = response.getOutputStream();
		int bytesRead;
		byte[] buffer = new byte[512];

		while ((bytesRead = fileInputStream.read(buffer)) != -1) {
			out.write(buffer, 0, bytesRead);
			out.flush();
		}// end while
		out.close();
	}// doGet
	
	protected String getMimeType(String fileType) {
		if (fileType.equals("PDF"))
			return "application/pdf";
		return "application/octet-stream";
	}// end getMimeType

...

Se eu não esqueci nada, é mais ou menos isso aí que você pode fazer. :wink:

Criado 20 de novembro de 2010
Ultima resposta 21 de nov. de 2010
Respostas 1
Participantes 2