java - 如何使用 JPA 将 Servlet 中的 BLOB 存储在数据库中

标签 java database servlets jpa java-ee-6

我正在尝试使用 JSP/Servlet/EJB(用于 JPA)编写简单的 Web 应用程序,以将文件(最多 50 mb)上传到数据库。

在我的实体类(用户)中,我有以下代码:

@Lob
private byte[]             file;

这是我在 Servlet 中检索文件的方法(实际上它将文件保存在我的计算机上,我想更改它):

for (Part part : request.getParts()) {
        InputStream is = request.getPart(part.getName()).getInputStream();
        int i = is.available();
        byte[] b = new byte[i];
        is.read(b);
        String fileName = getFileName(part);
        FileOutputStream os = new FileOutputStream("C:/files/" + fileName);
        os.write(b);
        is.close();
} 

我不知道如何将字节数组(使用 for 循环)写入我的用户实体。有什么想法吗?

最佳答案

您的输入流处理不正确 - available 方法不会返回整个流的长度,它只为您提供在流之前可读取的(估计)量将会被阻止。强调估计。您需要循环读取整个流,直到读取调用结果为 -1,或者使用类似 IOUtils 的实用程序来自Apache Commons IO .

final byte[] data = IOUtils.toByteArray(inputStream);

获得数据后,只需将其设置到您的实体即可:

entity.setFile(data);

然后保存。

关于java - 如何使用 JPA 将 Servlet 中的 BLOB 存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16130857/

相关文章:

java - 将 GWT 客户端对象序列化为字符串并在服务器上反序列化的方法?

java - 使用 ireport 生成 Excel 文件的密码保护

java - 如何让 Mockito 根据枚举返回不同的值?

java - 使用fmt :formatDate (or other) to output timestamp since epoch

java - 来自数据库的 Jsf2 primefaces 菜单栏

sql - 如果 child 存在,如何只显示 TreeView 展开符号 [+]

tomcat - 如何在手机上制作一个midlet来访问pc上的一个servlet

java - Spring AOP - 无法执行方面

php - 有没有更好的方法在 mysql 和 PHP 中查询这个

ios - 计算类中的行数并选择给定数字的行