我有这样的实体
@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
答案 0 :(得分:0)
感谢大家的回答,我发现了错误。
我认为文件是包含该文件的二进制文件,我认为该文件存储在数据库中,但我错了,文件是抽象的,只存储一些元数据和文件路径,文件本身需要从磁盘存储和检索。
我将不得不修改我的系统以使用byte []来保存实际的二进制文件,因为那时我需要制作很多程序来存储和检索它们。
再次感谢您的回答,我从他们那里学到了很多东西