Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Servlet-数组的输出图像导致图像损坏_Java_Image_Servlets_Stream - Fatal编程技术网

Java Servlet-数组的输出图像导致图像损坏

Java Servlet-数组的输出图像导致图像损坏,java,image,servlets,stream,Java,Image,Servlets,Stream,我想做的是从磁盘获取图像文件,调整其大小,并使用servlet将其提供给客户机 但是,我得到的是破碎的图像图标,而不是调整大小的图像。我完全不知道会出什么问题。可能只有一部分图像是流式传输的?以下是我目前掌握的代码: import java.awt.image.BufferedImage; import java.awt.image.DataBufferByte; import java.awt.image.WritableRaster; import java.io.ByteArrayInpu

我想做的是从磁盘获取图像文件,调整其大小,并使用servlet将其提供给客户机

但是,我得到的是破碎的图像图标,而不是调整大小的图像。我完全不知道会出什么问题。可能只有一部分图像是流式传输的?以下是我目前掌握的代码:

import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.WritableRaster;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.mortennobel.imagescaling.ResampleFilters;
import com.mortennobel.imagescaling.ResampleOp;

public class ImageServlet extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        String downloadPath = "/pathtofile";

        File file = new File(downloadPath);

        BufferedImage image = ImageIO.read(file);

        ResampleOp resampleOp = new ResampleOp(100, 100);
        resampleOp.setFilter(ResampleFilters.getLanczos3Filter());
        image = resampleOp.filter(image, null);

        WritableRaster raster = image.getRaster();
        DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
        byte[] imageBytes = data.getData();

        response.setContentType(FileBusiness.getFileMimeType(file));
        response.setContentLength(imageBytes.length);
        response.setHeader("Content-Disposition","inline; filename=\"" + file.getName() + "\"");

        byte[] buf = new byte[1024];
        int count = 0;
        try (InputStream in = new ByteArrayInputStream(imageBytes);
             OutputStream out = response.getOutputStream())
        {
            while ((count = in.read(buf)) >= 0)
            {
                out.write(buf, 0, count);
            }

            out.flush();
        }
    }
}

这里的
file
是从磁盘读取的文件映像。

首先,您应该始终
flush
outputStreamsRight,感谢您指出这一点。我已经更新了这个问题。但是,这并不能解决问题。为了更快地获得更好的帮助,请发布一个。用可用的servlet代码更新了问题。最好总是包含SSCCE的导入。例如,代码中是否提到了该问题?