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)