浏览器无法加载本地文件,在后台读取字节流后返回给前端显示

来源:互联网 发布:mysql的好处 编辑:程序博客网 时间:2024/04/30 14:15

由于安全性考虑,许多浏览器不允许访问本地文件。

用谷歌浏览器打开html时,img的src赋值如F:/XXX/XXX/**.jpg,console显示no allowed to load local resourses

1. 将src改为file:///F:/XXX形式,依然无法加载图片

2. 试过下载LocalLinks插件,无效

3. 加--allowed-access-file-from-files命令失败

4. 在后台读取图片的字节流,再转成JSON形式字符串,返回给前端显示

    一开始使用FileInputStream,将字节流读入byte数组

FileInputStream in=new FIleInputStream(imageurl);

byte[ ]data=new byte[in.avaliable]; //这一句可得到正确文件大小的byte数组

        in.read(data);     //调试发现,data数组每次的值都不一样,大小与正确文件大小不符,原因未知

        in.close();

   后使用IOUtils.toByteArray方法,可正常运行,后台代码如下

public String showPicture(String imageurl,HttpServletResponse response){
FileInputStream in;
try{  
File file=new File(imageurl);
in=new FileInputStream(file);
int i=(int) file.length();//得到文件大小
StringBuilder sb=new StringBuilder();
sb.append("data:image/jpg;base64,");  //前端可以判断是图片数据
String b= new String(Base64.encodeBase64(IOUtils.toByteArray(in)));
sb.append(b);
System.out.println(b.length());
return sb.toString();
}catch (IOException e) {  
               e.printStackTrace();  
           }  
return null;
}

 前端代码: 令img标签的src属性=上述代码返回的string



0 0