java怎么把图片以base64字节存入数据库,并将其显示到jsp页面上

来源:互联网 发布:设计模式 python 书 编辑:程序博客网 时间:2024/05/22 00:40

这两天工作上遇到了这个问题,在网上查了很多资料,感觉比较乱,故在此整理一下。

我要实现的功能就是 页面显示数据库中的base64字节码 也就是三张图片 用户浏览上传本地图片 点击上传 页面上的图片会切换。



一 前期准备

1.数据库建表  imgCODE字段我选得clob类型 用来存二进制字节码的

2.jsp页面的浏览选择文件 上传   打红圈的是需要注意的   enctype这是需要写上 选择文件时会用上


3.实体类


二 将图片存入数据库

@RequestMapping(value = "/upload")
    public String upload(ModelMap modelMap, HttpServletRequest req, HPicture p,
            @RequestParam("files") MultipartFile file)
            throws IllegalStateException, IOException {

        if (file != null) {// 判断上传的文件是否为空
            String path = null;// 文件路径
            String type = null;// 文件类型
            String fileName = file.getOriginalFilename();// 文件原名称
            System.out.println("上传的文件原名称:" + fileName);
            // 判断文件类型
            type = fileName.indexOf(".") != -1 ? fileName.substring(
                    fileName.lastIndexOf(".") + 1, fileName.length()) : null;
            if (type != null) {// 判断文件类型是否为空
                if ("GIF".equals(type.toUpperCase())
                        || "PNG".equals(type.toUpperCase())
                        || "JPG".equals(type.toUpperCase())) {
                    // 项目在容器中实际发布运行的根路径
                    String realPath = req.getSession().getServletContext()
                            .getRealPath("/");
                    // 自定义的文件名称
                    String trueFileName = String.valueOf(System
                            .currentTimeMillis()) + fileName;
                    // 设置存放图片文件的路径
                    path = realPath + trueFileName;
                    System.out.println("存放图片文件的路径:" + path);
                    // 转存文件到指定的路径
                    file.transferTo(new File(path));
                    InputStream in = null;
                    byte[] data = null;
                    // 读取图片字节数组
                    try {
                        in = new FileInputStream(path);
                        data = new byte[in.available()];
                        in.read(data);
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    // 对字节数组Base64编码
                    BASE64Encoder encoder = new BASE64Encoder();
                    String a = encoder.encode(data);
                    String pp = a;
                    p.setImgcode(pp);
                    p.setImgpath(path);
                    picservice.saveA(p);
                    String ad = realPath + trueFileName;
                    System.out.println("文件成功上传到指定目录下");
                } else {
                    System.out.println("不是我们想要的文件类型,请按要求重新上传");
                }
            } else {
                System.out.println("文件类型为空");
            }
        } else {
            System.out.println("没有找到相对应的文件");
        }

二 从数据库中读取图片

我给存入图片的数据定义了no这个数据库列表 ,根据no=1,查到那条记录,我用的是list存取的值,那base64的值就是list.get(0)  

三 如何显示在jsp页面上


从数据库查出来就可以用${}显示在jsp页面上,注意标签格式是这样的<img src="data:image/png;base64,${pic.imgcode }"


-------------------------------------------------------------------------------------------------------------------------------------------------------------end


阅读全文
1 0
原创粉丝点击