PrimeFaces uploadFile:如何将上传的图像文件保存到Web应用程序中的某个目录并将其检索回来

时间:2013-11-06 16:20:38

标签: primefaces jsf-2.2

我有一个网络应用程序,想要将图像保存到我的数据库,然后想要从数据库中检索保存的图像。我可以通过PrimeFaces fileUpload将图像上传到我的网络应用程序,并将图像属性保存到我的数据库。但是,我无法将uploaeded映像保存到我的Web应用程序中的某个目录中,以便稍后我可以从DB检索其路径和属性以及目录中的映像。我收到以下错误:

javax.el.ELException: /compositions/defineType.xhtml @122,56 fileUploadListener="#{typeBean.handleTypeImageUpload}": java.io.FileNotFoundException: C:\Users\mta\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\MyWebApp\webapp\images\uploadedImages\alarmPassive.gif

我的文件上传监听器:

public void handleTypeImageUpload(FileUploadEvent event) throws IOException {  
    UploadedFile file = event.getFile();
    Type newTypeProp = new Type();
    newTypeProp .setTypeName("someName");
    newTypeProp .setIconFileName(imageFile.getFileName());
    newTypeProp .setIcon(imageFile.getContents());

    databaseDao.saveType(newTypeProp );

    FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");  
    FacesContext.getCurrentInstance().addMessage(null, msg);  

    String prefix = FilenameUtils.getBaseName(file.getFileName());
    String suffix = FilenameUtils.getExtension(file.getFileName());

    File fileToDirectory = File.createTempFile(prefix + "-", "." + suffix, new File("C:\\temp"));

    InputStream is = event.getFile().getInputstream();
    OutputStream out = new FileOutputStream(fileToDirectory);
    byte buf[] = new byte[1024];
    int len;
    while ((len = is.read(buf)) > 0)
        out.write(buf, 0, len);
    is.close();
    out.close();
}

保存到DB的我的类型支持bean:

public class Type {
    private Integer typeId;
    private String typeName;
    private byte[] icon;
    private String iconFileName;

    // getters & setters
    ...
}

xhtml文件上传:

<p:fileUpload style="font-size:11px;" fileUploadListener="#{typeBean.handleTypeImageUpload}" 
    mode="advanced" dragDropSupport="true"  
    sizeLimit="100000" fileLimit="3" update="messages"
    allowTypes="/(\.|\/)(gif|jpe?g|png)$/" 
    label="#{general.select}" uploadLabel="#{general.upload}" 
    cancelLabel="#{general.cancel}">
</p:fileUpload>

现在,我如何将图像文件保存到我的网络应用程序中的某个目录中,以便以后我可以获取它?非常感谢任何帮助。

0 个答案:

没有答案