1.项目在服务器D盘workspaces下,图片在服务器E盘demo下,不考虑将图片复制到项目中,怎么用代码实现。
2.数据库有图片的相对路径,已通过代码获取到图片绝对路径。
1.项目在服务器D盘workspaces下,图片在服务器E盘demo下,不考虑将图片复制到项目中,怎么用代码实现。
2.数据库有图片的相对路径,已通过代码获取到图片绝对路径。
不知道我理解的是否正确,题主想问的是前端访问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
里确定绝对路径的根目录(我已经帮您写好了),就可以直接通过数据库获取的图片的相对路径查找到对应的图片了。
希望能帮助到您!
10 回答11.2k 阅读
15 回答8.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
8 回答6k 阅读
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
图片读取到后,把inputstream读取到byte数组中,然后再将byte数组写入到response中,且response.setContentType("image/jpeg")注意关闭流等操作