我正在尝试使用 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/