我使用以下方法通过primefaces上传器保存图片:
public void carregarArquivo(FileUploadEvent event)
throws FileNotFoundException, IOException {
InputStream input = event.getFile().getInputstream();
ServletContext servletContext = (ServletContext) FacesContext
.getCurrentInstance().getExternalContext().getContext();
File arquivo = new File(servletContext.getRealPath("") + File.separator
+ "images" + File.separator + "tmp" + File.separator
+ numMatricula + ".png");
OutputStream output = null;
try {
output = new FileOutputStream(arquivo);
IOUtils.copy(input, output);
System.out.println("Arquivo salvo com sucesso em "
+ arquivo.getAbsolutePath());
tmpFotoPath = "/images/tmp/" + numMatricula + ".png";
IOUtils.copy(input, output);
System.out.println("Arquivo salvo com sucesso em "
+ arquivo.getAbsolutePath());
tmpFotoPath = "/images/tmp/" + numMatricula + ".png";
} finally {
IOUtils.closeQuietly(output);
IOUtils.closeQuietly(input);
}
}
将标准 eclipse web 项目部署到 JBoss AS 7.1.1 时,该方法正常工作,并将图像保存到 /home/hfluz/Servers/standalone 7.1.1/standalone/deployments/IdentificacaoInstitucional.war/images/tmp/
所以我创建了一个 maven webapp 并实现了相同的类和 xhtml 页面(也是相同的 web.xml)。默认情况下,JBoss AS maven 插件将我的应用程序部署到另一个文件夹,当它尝试使用 File 作为参数创建 FileOutputStream 实例时(输出 = new FileOutputStream(arquivo);)我收到以下错误:
/home/hfluz/Servers/standalone 7.1.1/standalone/tmp/vfs/temp3081e1eb97c799e8/content-b5984e02f5b23513/images/tmp/200701500694.png(没有这样的文件或目录)
Windows 7 和 Ubuntu 12.04 都会出现此问题。
这是一个错误还是我做错了什么?
编辑: 我想我发现了问题。
当我部署 ant webapp 时,会创建以下结构: - identificacao_institucional.war - WEB-INF - META-INF - images - tmp - index.xhtml
当我部署 maven webapp 时,这是在 JBoss 部署文件夹中创建的结构: - identificacao_institucional.war - META-INF - 资源 - WEB-INF - index.xhtml
由于某种原因,maven 应用程序不会创建图像目录及其子目录。我认为在调用“new FileOutputStream(arquivo);”之前可能会调用“arquivo.mkdirs()”和“arquivo.createNewFile()”。会解决这个问题,但它没有。