使用JSF和Primefaces下载文件时出错

时间:2017-10-14 20:28:17

标签: jsf primefaces

我有这样的实体

@Entity
public class myFiles  implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int idmyFiles;


    @Lob   
    private File myFile;

    getters and setters...

我有一个似乎有效的上传表单,当我上传文件时,我可以在postgtes表中看到它。

在表格中(我正在使用primefaces)我有这个

<p:fieldset id="myFiles" class="recuadro" legend = "Upload a fileos">
    <p:fileUpload value="#{abmBean.fichero}" mode="simple" />
    <p:commandButton id="btnSubir" ajax="false" process="@all" update="@all"
        action="#{abmBean.uploadFile()}" value="Subir" />
</p:fieldset>   

这是上传文件的方法

public void uploadFile() {
    File destFile = new File("/tmp/"+fichero.getFileName());
    FileUtils.copyInputStreamToFile(fichero.getInputstream(), destFile);

    /* Then I just create a myFile object F and just F.setFile(destFile) */
}

似乎有效

要下载我有这个方法的文件

public downloadFile(int id) {
    /* the int id is the id of the myfile object F */

    /* I retrieve from the database the F object and then this*/
    File fichero = new File("/tmp/"+F.getFile.getName());

    FileUtils.copyFile(F.getFile, fichero);

    Faces.sendFile(fichero, true);
}

这很好用,我有文件回来

但问题是,我意识到我上传的文件也被复制到/ tomcat7 / bin文件夹,如果我从那里删除文件,那么当我想下载它时,我得到一个fileNotFoundException。

我只需要能够为用户提供数据库中的文件

我正在使用Tomcat7,Java 1.6(是的很老)Primefaces 6,Postgresql 9.1和Debian上的JSF2

1 个答案:

答案 0 :(得分:0)

感谢大家的回答,我发现了错误。

我认为文件是包含该文件的二进制文件,我认为该文件存储在数据库中,但我错了,文件是抽象的,只存储一些元数据和文件路径,文件本身需要从磁盘存储和检索。

我将不得不修改我的系统以使用byte []来保存实际的二进制文件,因为那时我需要制作很多程序来存储和检索它们。

再次感谢您的回答,我从他们那里学到了很多东西