如何使用页面中的img标签读取本地磁盘中的图片,并展现到页面上

本文介绍了在使用easyUI时遇到的问题,如何通过Java后端读取本地磁盘图片并以流的形式返回给前端,使得HTML页面能够正确显示图片。通过在img标签的src属性中设置一个请求路径,后端接收到路径参数后,读取文件字节流并将其通过response输出,从而实现本地图片的展示。

我在使用easyUI的过程中,想要达到的效果是,每行都带有一个小图片(缩略图),因此每行都要添加一个img标签,但src的路径我写成绝对路径即 F:/photo/aa/jpg ,无法查看到图片,显示img中的alt属性,然后查阅网上的见解,说要在路径前添加file:///,即 file:/// F:/photo/aa/jpg ,仍是打不开,纠结了好久,找不到原因,最后经老大指导,需要读取流。

操作如下,即在img的src路径内写入路径请求并指定能找到图片地址的参数,我传入的参数直接是图片的地址,请求到后台,使用文件字节流按照图片地址读取图片,使用response输出,这样页面就可以展示本地的图片了。

代码思路比较低端,有好的链接也发我一个呗,共同学习一下。

  @RequestMapping(value = "/showImg")
  @ResponseBody
  public void showImg( HttpServletRequest request,HttpServletResponse response,String pathName) {
   File imgFile = new File(pathName);
   FileInputStream fin = null;
   OutputStream output=null;
   try {
    output = response.getOutputStream();
    fin = new FileInputStream(imgFile);
    byte[] arr = new byte[1024*10];
    int n;
    while((n=fin.read(arr))!= -1){
     output.write(arr, 0, n);
    }
    output.flush();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   
   try {
    output.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }

### 3.1 Java读取本地图片通过URL传输给前端 Java可以通过读取本地磁盘中的图片文件,将其内容写入HTTP响应流,使前端能够通过指定的URL访问该图片渲染到页面上。以下是完整的实现方式。 #### 3.1.1 读取本地图片为字节数组 使用`FileInputStream`可以从本地路径读取图片文件,将其转换为字节数组: ```java import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class FileHelper { public static byte[] getPhoto(String filePath) throws IOException { File file = new File(filePath); FileInputStream fis = new FileInputStream(file); byte[] data = new byte[(int) file.length()]; fis.read(data); fis.close(); return data; } } ``` 此方法将文件一次性加载到内存中,适用于中小型图片文件[^2]。 #### 3.1.2 将图片数据写入HTTP响应流 在Servlet或Spring Boot控制器中,可以将上述字节数组写入`HttpServletResponse`输出流,设置正确的MIME类型,以便浏览器识别渲染图片: ```java import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.OutputStream; public void serveImage(HttpServletResponse response, String imagePath) throws IOException { byte[] imageData = FileHelper.getPhoto(imagePath); // 设置响应头信息 response.setContentType("image/jpeg"); // 可根据图片格式动态调整 response.setContentLength(imageData.length); // 写入响应输出流 try (OutputStream out = response.getOutputStream()) { ByteArrayInputStream in = new ByteArrayInputStream(imageData); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = in.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } out.flush(); } } ``` 这种方式确保了图片以二进制流的形式传输,前端通过指定URL即可获取渲染图片。 #### 3.1.3 Spring Boot 控制器示例 如果使用Spring Boot框架,可以通过控制器直接返回图片资源: ```java import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.io.File; import java.nio.file.Files; @RestController public class ImageController { @GetMapping("/image") public ResponseEntity<byte[]> getImage(@RequestParam String path) throws IOException { File file = new File(path); byte[] content = Files.readAllBytes(file.toPath()); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.IMAGE_JPEG); // 可根据实际格式动态设置 headers.setContentLength(content.length); return ResponseEntity.ok().headers(headers).body(content); } } ``` 前端可通过如下HTML代码引用该图片: ```html <img src="http://yourdomain.com/image?path=/local/path/to/image.jpg" /> ``` ---
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值