Java Servlet-数组的输出图像导致图像损坏
我想做的是从磁盘获取图像文件,调整其大小,并使用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
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的导入。例如,代码中是否提到了该问题?