0

我正在制作一个表格,将多个图像上传到 mysql 数据库中的 blob 字段。

在一个 servlet 中,我使用 type="file" 获取用户上传的所有图像。

在将图像插入数据库之前,我必须检查 type="file" 是否为空。为此,根据我的代码的正确结构,我这样做:

  if(allegatoInputStream.read()>-1){....  
//allegatoInputStream is my InputStream

但是,在我调用 read() 方法之后,我的 InputStream 变成了空的,所以我没有任何东西可以插入到我的 blob 字段中。

我做了这样的事情

InputStream InputStream_FOR_THE_CHECK = blablabla.getInputStream();
  if(InputStream_FOR_THE_CHECK.read()>-1){....  

但我认为这不是做我想做的事情的正确方法

4

3 回答 3

0

您可以将流包装在 a 中PushbackInputStream,读取一个字节以查看是否有内容,如果有则推回该字节。只要您PushbackInputStream在处理文件内容时使用相同的实例,该字节就会成为流的一部分。

于 2013-10-19T11:19:22.713 回答
0

您的 read() 调用从流中读取一个字节并将其丢弃。您需要将结果存储在一个变量中,测试它是否为 -1,如果不是,请使用它。它是流中下一个字节的值。

于 2013-10-19T11:20:43.107 回答
-1

您可以使用inputStream.available(). 从JavaDoc

返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。下一次调用可能是同一个线程或另一个线程。单次读取或跳过这么多字节不会阻塞,但可能会读取或跳过更少的字节。

请注意,虽然 InputStream 的某些实现会返回流中的字节总数,但许多不会。使用此方法的返回值来分配旨在保存此流中所有数据的缓冲区是不正确的。

如果此输入流已通过调用 close() 方法关闭,则此方法的子类的实现可以选择抛出 IOException。

在您的场景中:

if(allegatoInputStream.available()>0){....  
//allegatoInputStream is my InputStream
于 2013-10-19T11:09:56.960 回答