Caros, estou usando o Myfaces Trinidad para fazer upload de arquivo. Mais uma vez já procurei muito na net e não encontrei uma possível solução para meu problema. O que acontece é que quando eu passo o caminho através do comando sc.getRealPath("/arquivos") o sistema passa um caminho relativo e ocorre erro. Quando passo o caminho real “E:/eclipse/workspace/ControleRelatorio/WebContent/arquivos” não ocorre erro. Vejam o código abaixo:
public String salvar()
{
try
{
FacesContext context = FacesContext.getCurrentInstance();
// pega informações do contexto para
// conseguir o caminho físico
// necessário para fazer o upload de arquivo
ServletContext sc = (ServletContext) context.getExternalContext()
.getContext();
// verifica se há um arquivo para salvar
if (arquivo != null)
{
InputStream stream = arquivo.getInputStream();
int fSize = (int) arquivo.getLength();
byte[] buffer = new byte[(int) fSize];
String nomeArquivo = this.separaNomeArquivo(arquivo
.getFilename());
System.out.println(arquivo.getFilename());
// chama o método que salva o arquivo
Boolean salvarImagem = this.salvarArquivo(buffer,
stream,
nomeArquivo,
fSize,
sc.getRealPath("/arquivos"));
if (!salvarImagem)
{
FacesUtils.mensErro("Problema no upload do arquivo");
}
//tirar comentario
relatorioDados.setRel_ArquivoRdlNome(nomeArquivo);
File file = new File(sc.getRealPath("/arquivos") + "/" + nomeArquivo);
relatorioDados.setRel_ArquivoRdl(file);
}
if (relatorioDados.getRel_Id() == null)
{
relatorioDadosDao.salvar(relatorioDados);
this.novoRelatorioDados();
FacesUtils.mensInfo("Relatorio gravado com sucesso.");
}
else
{
relatorioDadosDao.atualizar(relatorioDados);
FacesUtils.mensInfo("Relatorio atualizado com sucesso.");
}
}
catch(Exception e)
{
FacesUtils.mensErro("Ocorreu um erro ao gravar o relatorio.");
e.printStackTrace();
}
return "sucesso";
}
Agora, vejam a parte onde o arquivo é aberto, e é onde ocorre o erro:
public boolean salvarArquivo(byte[] buf,
InputStream stream,
String nomeArquivo,
int size,
String path)
throws FileNotFoundException, IOException
{
nomeArquivo = this.separaNomeArquivo(nomeArquivo);
File file = new File(path + "/" + nomeArquivo);
FileOutputStream output = new FileOutputStream(file); //aqui ocorre o ERRO, não encontra o arquivo no caminho especificado
try
{
while (true)
{
int count = stream.read(buf, 0, size);
if (count == -1)
break;
output.write(buf, 0, count);
}
}
catch (Exception ex)
{
ex.printStackTrace();
return false;
}
finally
{
output.flush();
output.close();
stream.close();
}
return true;
}
Alguém pode me ajudar. Obrigado…