根据昨天的总结,可深层理解图片中src的路径。所以今天实现了一个想法。就是路径写入的是Controller,然后自动去本地找。
其实就是将电脑的本地图片 显示出来。通过输出流的方式。
代码如下:
@RequestMapping(value = "/img/{id}") public void img(@PathVariable(value = "id") String id,HttpServletResponse response) { File file = new File("D:\img\" + id + ".jpg"); System.out.println(file); try { InputStream inputStream = new FileInputStream(file); OutputStream outputStream = response.getOutputStream(); byte[] b = new byte[1024]; int a = -1; while ((a = inputStream.read(b)) != -1) { outputStream.write(b); System.out.println(a); } response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode("a.jpg", "UTF-8")); inputStream.close(); outputStream.flush(); outputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
可是无法正常显示。发现打开的文件图片大小为1kb,实际图片为43kb。
最后发现了是输出流写的过程中,发生的错误。其实,就是方法的问题。
换成outputStream.write(b,0,a);就好了
所以接下来,我去读一下write(Byte[]),和write(Byte[],0,length)两个方法的区别。
-
write(byte b[])
public void write(byte b[]) throws IOException { write(b, 0, b.length); }
所以可以看到,此方法内部调用的 write(b, 0, b.length);
可突然发现,重新用回write(byte b[])方法,依然好用。那我之前是见鬼了么???
[○・`Д´・ ○]