java 怎么才能读取本地磁盘中的图片并传给前端(URL)

新手上路,请多包涵

1.项目在服务器D盘workspaces下,图片在服务器E盘demo下,不考虑将图片复制到项目中,怎么用代码实现。
2.数据库有图片的相对路径,已通过代码获取到图片绝对路径。

阅读 10.4k
5 个回答
新手上路,请多包涵

图片读取到后,把inputstream读取到byte数组中,然后再将byte数组写入到response中,且response.setContentType("image/jpeg")注意关闭流等操作

拿到文件流, 往回推.

用IO流读取你要读取的文件,然后返回

不知道我理解的是否正确,题主想问的是前端访问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 里确定绝对路径的根目录(我已经帮您写好了),就可以直接通过数据库获取的图片的相对路径查找到对应的图片了。

希望能帮助到您!

大兄弟。不存在的。因为你没有东西把这玩意暴露在公网上。换句话讲是你没有协议让公网访问你的磁盘。如果你拿nginx转发一道的话这样就可以了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题