Abrir arquivo de uma coluna Filestream do MSSQLServer2008 com sua respectiva aplicação

1 resposta
E

Estou desenvolvendo uma aplicação utilizando o tomcat com hibernate e uma das tarefas desta aplicação é a transição de arquivos para o MSSqlServer 2008. Utilizo a ferramenta filestrean para armazenar o arquivo. O armazenamento e a busca deste arquivo está sendo feita normalmente, porém necessito abrir o arquivo com a aplicação correspondente, ou seja, se armazenar um arquivo word, ao recuperá-lo preciso que meu código o faça abrindo este arquivo no word normalmente. Alguém pode me auxiliar com o código?

Minha aplicação já armazena e lê o arquivo do banco através do hibernate. Carrego um objeto com parâmetro tipo File antes de armazena-lo e quando recupero também carrego o objeto e o respectivo parâmetro File, quando imprimo este parâmetro em tela retorna o nome e extensão corretamente, preciso no entanto abrir este arquivo que no caso é um .pdf e imagino que deve estar armazenado em local reservado pelo FileStream.

1 Resposta

E

Caso necessitem mais informações segue o codigo que está armazenando um arquivo normalmente no banco de dados e estou recuperando novamente para um parametro tipo File:

[color=red]JSP para selecionar arquivo do HD:[/color]

<h1>Armazenar Documentos</h1>
<br />
<input name="Arquivo" type="file" style="width: 457px" size="60" tabindex="30" />
<br /><br />
<input type="submit" value="Inserir" name="acao" />

[color=red]JSP para consultar arquivo no BD (SQL Server 2008):[/color]

<select name="Pesquisa">
 	<option selected="selected">Escolha o campo</option>
 	<option>TIPO DE ARQUIVO</option>
 	<option>SEGMENTO</option>
 	<option>FORNECEDOR</option>
 	<option>NOME DO ARQUIVO</option>//opção escolhida
	</select></p>				
	<input type="submit" value="Pesquisar" name="acao" />	
Lista de arquivos:
	<form name="Lista"><ul>
	<c:forEach items="${lista}" var="arquivos">
<li>
		<c:out value="${arquivos.arquivo}" /> 
<!--Como abrir o arquivo que está sendo mostrado normalmente na pagina??-->
		<input type="button" name="Executar" value="Abrir" />
		</li>
	</c:forEach>
	</ul>							 		
</form>

[color=red]Controller recebe arquivo do jsp e carrega como parâmetro tipo File do objeto arquivo e chama método para armazenar no banco de dados:[/color]

if (acao.equals("Inserir")) {				
	Transacao Trans=new Transacao();
	String Sarq = request.getParameter("Arquivo");

	File arquivo=new File(Sarq);
	Arquivo a=new Arquivo();
	a.setArquivo(arquivo);
	Trans.gravaDoc(a);
return "Principal";
			}	

}	
if (acao.equals("Pesquisar")) {
	List<Arquivo> listaArq=new ArrayList<Arquivo>();
String Ref_Pesquisa = request.getParameter("Ref_Pesquisa");		listaArq=Trans.pesqArq(Ref_Pesquisa);
	request.setAttribute("lista", listaArqFiltrada);
	return "Consulta";
}

[color=red]Recebe objeto arquivo e armazena no banco de dados/busca arquivo no banco de dados:[/color]

public class Transacao {
public void gravaDoc(Arquivo a) {		
		Session sessao = HibernateUtil.getSession();
		Transaction tx = sessao.beginTransaction();
		sessao.save(a);	
		tx.commit();
		sessao.close();
	}
public List<Arquivo> pesqArq(String Ref_Pesquisa){
		List<Arquivo> RetArq=null;
		String pesq=Pesquisa;
		String ref=Ref_Pesquisa;
		Session sessao = HibernateUtil.getSession();
		Transaction tx = sessao.beginTransaction();			
		RetArq=pesqFiltroArq(pesq,ref,sessao);
		tx.commit();
        	sessao.close(); 
		return RetArq;	
}
}

Me ajude aí galera !!! Num tem sentido eu apresentar um projeto de escola onde armazeno um arquivo, recupero-o mas não consigo fazer sua leitura !!!
Pra garantir que o arquivo estava sendo armazenado corretamente como parâmetro File, antes de envia-lo ao BD fiz um pequeno código para abri-lo e funcionou, segue o código de abertura:

try { 
System.out.println(a.getArquivo());
	String comando="C:\\Program Files\\Adobe\\Reader 9.0\\Reader\\AcroRd32.exe ";
	String arq = "G:\\CREA-MG.pdf";
	Runtime.getRuntime().exec(comando+arq);
	//FileInputStream is = new FileInputStream(a.getArquivo());
	//Runtime.getRuntime().exec(comando+is);
	} catch (IOException e) {
		System.out.println("Erro: "+e.getMessage());
}

porem quando tento abri-lo como parâmetro (substituindo por parte comentada do código anterior) eu não consigo, da mesma forma que o faço após recupera-lo do banco ele retorna que o arquivo não foi localizado, imagino que tenha que grava-lo em algum local novamente, este código de armazenar no HD eu não tenho… Também não sei se existe código do hibernate que recupera e abre diretamente o arquivo.

Erro: CREA-MG.pdf (O sistema não pode encontrar o arquivo especificado)

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