读取图像并通过套接字发送 - 无法打开文件

时间:2015-04-16 07:52:28

标签: java image sockets image-processing

我正在尝试编写一个简单的服务器,它使用套接字并在从浏览器收到http请求时从光盘读取图像。

我能够收到请求,从光盘读取图像并将其传递给浏览器(然后浏览器自动下载图像)。但是,当我尝试打开下载的图像时,它会显示:

Could not load image 'img.png'. Fatal error reading PNG image file: Not a PNG file

所有其他类型的扩展(jpg,jpeg,gif等...)

也是如此

你能帮助我,告诉我我做错了什么吗?我怀疑我读取图像的方式可能有问题,或者可能需要指定一些编码?

从光盘读取图像:

    // read image and serve it back to the browser
    public byte[] readImage(String path) {
        File file = new File(FILE_PATH + path);

        try {
            BufferedImage image = ImageIO.read(file); // try reading the image first
            // get DataBufferBytes from Raster
            WritableRaster raster = image.getRaster();
            DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
            return data.getData();
        } catch (IOException ex) {
            // handle exception...
        }

        return ("Could not read image").getBytes();
    }

通过套接字写入数据:

OutputStream output = clientSocket.getOutputStream();
output.write(result);

在这种情况下,结果包含readImage方法生成的字节数组。

编辑:第二次尝试将图像作为普通文件读取

FileReader reader = new FileReader(file);
char buf[] = new char[8192];
int len;
StringBuilder s = new StringBuilder();
while ((len = reader.read(buf)) >= 0) {
     s.append(buf, 0, len);
     byte[] byteArray = s.toString().getBytes();
}

return s.toString().getBytes();

1 个答案:

答案 0 :(得分:2)

您可以使用ByteArrayOutputStream,例如,

 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
 ImageIO.write(image, "jpg", byteArrayOutputStream);

然后你可以写为socket,

 outputStream.write(byteArrayOutputStream.toByteArray());