0

我正在尝试使用 JSP/Servlet/EJB(用于 JPA)编写简单的 webapp,用于将文件(最大 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 循环)写入我的用户实体。有任何想法吗 ?

4

1 回答 1

2

您的输入流处理不正确 - 该available方法不会返回整个流的长度,它只会为您提供在流被阻塞之前可以读取的(估计的)数量。强调估计。您需要循环读取整个流,直到读取调用导致 -1,或者使用Apache Commons IOIOUtils之类的实用程序。

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

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

entity.setFile(data);

然后保存它。

于 2013-04-21T12:20:38.593 回答