gpt4 book ai didi

java - 从我的 war 目录提供图像?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:10 25 4
gpt4 key购买 nike

我有一个 servlet,它提供存储在 blob 中的图像文件。如果找不到所请求的图像,我想提供一个我包含在我的 war 目录中的静态图像。我们如何做到这一点?这就是我从数据存储区提供 blob 图像的方式:

public class ServletImg extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
{
MyImgWrapper obj = PMF.get().getPersistenceManager().
getObjectById(MyImgWrapper.class, 'xyz');
if (obj != null) {
resp.getOutputStream().write(obj.getBlob().getBytes());
resp.getOutputStream().flush();
}
else {
// Here I'd like to serve an image from my war file.
/war/img/missingphoto.jpg
}
}
}

是的,我只是不确定如何从我的 war 目录中的图像中获取图像字节,或者是否有其他方法可以做到这一点?

谢谢

最佳答案

其他答案推荐ClassLoader#getResourceAsStream()期望图像位于 classpath 中。但是,您也可以使用 ServletContext#getResourceAsStream()webcontent 获取图像。 . ServletContext 由继承的 getServletContext() 在 servlet 中可用。方法。

InputStream input = getServletContext().getResourceAsStream("/img/missingphoto.jpg");

也就是说,完全读取和写入 byte[] 并不是真正的内存效率。考虑像这样通过一个小字节缓冲区 (1~10KB) 进行流式传输:

input = getServletContext().getResourceAsStream(path);
output = response.getOutputStream();
byte[] buffer = new byte[1024];
for (int length = 0; (length = input.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}

关于java - 从我的 war 目录提供图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3196792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com