不知道我理解的是否正确,题主想问的是前端访问URL后端传回指定的图片。
那么我以我在 Tomcat 的实例举个例子,需要 import javax.servlet:
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author Hephaest
* @version 1.0.1
* @since 14/5/2019
*/
public class GetDiskPhoto extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) {
/* 从前端 URL 获取图片相对地址*/
String imgPath = request.getParameter("path"); // 这个相当于 URL 格式是 http://xxxxx?path=xxxx
byte[] data = FileHelper.getPhoto(imgPath); // FileHelper是另一个类!接下来会讲到,分开写是因为题主如果后续有别的需求的话可以重用这个类。这边题主可以理解为调用 FileHelper.getPhoto() 这个函数后就可以直接得到相应图片的byte数组。
try {
response.getOutputStream().write(data); // 直接将 byte 数组写入 response, 前端就能看到想要访问的图片了。
} catch (IOException e) {
e.printStackTrace();
}
}
}
上面代码中提到的 FileHelper 类是用于将图片读取成 byte 数组。
代码详见下方:
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Arrays;
/**
* @author Hephaest
* @version 1.0.1
* @since 14/5/2019
* 此类用于将图片读取成 byte 数组。
*/
public class FileHelper {
public static byte[] getPhoto(String imgPath){
File img = new File("E/demo/" + imgPath);
ByteArrayOutputStream img_stream = new ByteArrayOutputStream();
try {
BufferedImage bi = ImageIO.read(img);
ImageIO.write(bi, "jpg", img_stream);
byte[] bytes = img_stream.toByteArray();
img_stream.close();
return bytes;
} catch (IOException e) {
e.getStackTrace();
}
return new byte[0];
}
}
上述代码看起来有点多是因为我包括了一些异常处理,您只需要在 FileHelper 里确定绝对路径的根目录(我已经帮您写好了),就可以直接通过数据库获取的图片的相对路径查找到对应的图片了。
希望能帮助到您!