我有一个这样的实体
@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。
我所需要的只是能够向用户提供数据库中的文件
我在 Debian 上使用 Tomcat7、Java 1.6(是的,很旧)Primefaces 6、Postgresql 9.1 和 JSF2
感谢大家的回答,我发现了错误。
我认为 File 是包含该文件的二进制文件,我认为该文件存储在数据库中,但我错了,该 File 是一个抽象文件,仅存储一些元数据和文件路径,文件本身需要存储和从磁盘中检索。
我将不得不修改我的系统以使用 byte[] 来保存实际的二进制文件,这太令人难过了,因为我需要制作很多程序来存储和检索它们。
再次感谢您的回答,我从他们那里学到了很多东西
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句