将InputStream转换为File

时间:2014-03-28 05:28:09

标签: java web-services jersey inputstream tesseract

我有一个使用Jersey构建的REST Web服务,它通过Tess4J Java绑定使用Tesseract进行OCR(光学字符识别)。现在Tess4J库希望你发送一个图像文件(png,jpg,tif等),但是对于Jersey处理,我得到一个包含图像的InputStream。

如何将此InputStream转换为Tesseract可识别的文件类型?我尝试过以下方法:

import org.apache.commons.io.IOUtils;

.....

private static File stream2file (InputStream in) throws IOException {            

    final File tempFile = File.createTempFile("stream2file", ".tmp");
    tempFile.deleteOnExit();

    try (FileOutputStream out = new FileOutputStream(tempFile)) {
        IOUtils.copy(in, out);
    }

    return tempFile;            
}

然后,Tesseract库抛出了一个例外,说它不接受我发送的文件类型(现在在这种情况下是' tmp')。我试过改变那个小小的' tmp'到了' tif'和其他支持的文件类型,但只是产生了相同的结果,所以我显然在这里遗漏了一些东西。

那么我如何获取InputStream,转换它,并将其转发给Tesseract作为它所期望的支持文件类型之一?

2 个答案:

答案 0 :(得分:2)

临时文件的文件扩展名必须与原始输入图像文件的文件扩展名匹配。

File类型外,Tess4J也接受BufferedImage作为输入。只需将inputstream转换为它,如下所示:

BufferedImage image = ImageIO.read(is);

答案 1 :(得分:0)

尝试(FileOutputStream out = new FileOutputStream(tempFile))。你在这一行有错误。 您应该使用FileOutputStream (String)而不是FileOutputStream(File)。 所以它应该是FileOutputStream(tempfile.getName())

传递给FileOutputStream构造函数的参数是一个字符串,它是实际文件的路径或文件名。它不是File对象。