java用流的方式把图片写入response

本文介绍了一种使用Java进行图片处理的方法,包括设置HTTP响应头防止浏览器缓存、通过两种不同方式读取并输出图片数据。第一种方法利用ImageIO直接读写图片,第二种方法采用文件流方式提供更广泛的文件格式支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

privatestaticMapimageContentType=newHashMap<>();
static {
imageContentType.put("jpg","image/jpeg");
imageContentType.put("jpeg","image/jpeg");
imageContentType.put("png","image/png");
imageContentType.put("tif","image/tiff");
imageContentType.put("tiff","image/tiff");
imageContentType.put("ico","image/x-icon");
imageContentType.put("bmp","image/bmp");
imageContentType.put("gif","image/gif");
}
httpServletResponse.setDateHeader("Expires", 0L);
httpServletResponse.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
httpServletResponse.addHeader("Cache-Control", "post-check=0, pre-check=0");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setContentType("image/jpeg");
ServletOutputStream out = null;

/*****method一:由于ImageIO.read不支持较大尺寸有时候会有错误*************/
BufferedImage image = ImageIO.read(new File(filePath));
out = httpServletResponse.getOutputStream();
ImageIO.write(image, "jpg", out);
out.flush();
/*****method二:直接用文件流来处理有更好的通用性*******************************************************/
File image = new File(filePath);
FileInputStream inputStream = new FileInputStream(image);
int length = inputStream.available();
byte data[] = new byte[length];
httpServletResponse.setContentLength(length);
String fileName = image.getName();
String fileType = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
httpServletResponse.setContentType(FormatUtils.imageContentType.get(fileType));
inputStream.read(data);
OutputStream toClient = httpServletResponse.getOutputStream();
toClient.write(data);
toClient.flush();

你可以使用Java的IO来读取本地图片文件,并将其写入HTTP响应中。下面是一个简单的示例代码: ```java import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ImageServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取图片文件路径 String imagePath = "path/to/your/image.jpg"; // 设置响应内容类型为图片 response.setContentType("image/jpeg"); // 读取图片文件 File imageFile = new File(imagePath); FileInputStream fis = new FileInputStream(imageFile); // 获取输出 OutputStream out = response.getOutputStream(); // 写入响应 byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } // 关闭 fis.close(); out.close(); } } ``` 在上面的示例中,首先需要指定要读取的图片文件的路径。然后,通过设置`response.setContentType("image/jpeg")`将响应内容类型设置为图片。接下来,使用`FileInputStream`读取图片文件,并通过`response.getOutputStream()`获取输出。最后,使用循环将读取的内容写入输出,并关闭输入和输出。 请注意,上述示例是基于Java Servlet的,适用于Web应用程序。如果你在其他环境中使用Java,可能需要根据具体情况进行适当的修改。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值