我正在制作一个表单,将几幅图片上传到mysql数据库中的blob字段。
在servlet中,我使用type=“文件”获取用户上传的所有图像。
在将图像插入数据库之前,我必须检查type=“文件”是否为空文件。为了做到这一点,根据代码的当前结构,我执行以下操作:
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){.... 但我不认为这是我想做的事的正确方式
发布于 2013-10-19 11:19:22
您可以将流包装在一个PushbackInputStream中,读取一个字节以查看是否有内容,如果存在,则将该字节向前推。只要您在处理文件内容时使用相同的PushbackInputStream实例,该字节就会成为流的一部分。
发布于 2013-10-19 11:20:43
read()调用从流中读取一个字节,并将其丢弃。您需要将结果存储在变量中,将其测试为-1,如果不是,则使用它。它是流中下一个字节的值。
发布于 2013-10-19 11:09:56
您可以使用inputStream.available()。来自JavaDoc
返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会在下次调用该输入流的方法时阻塞这些字节数。下一个调用可能是同一个线程或另一个线程。单个读取或跳过这么多字节不会阻塞,但可能读取或跳过较少的字节。 请注意,虽然InputStream的某些实现将返回流中的总字节数,但许多不会返回。使用此方法的返回值分配缓冲区以保存此流中的所有数据是永远不正确的。 如果通过调用close()方法关闭了该输入流,则该方法的子类实现可以选择抛出一个IOException。
在您的场景中:
if(allegatoInputStream.available()>0){....
//allegatoInputStream is my InputStreamhttps://stackoverflow.com/questions/19465031
复制相似问题