上传图片到Mongo数据库;从Mongo数据库下载图片显示到前端

/**
     * 上传一个图片文件,保存到mongo数据库中
     * @param doc
     * @param parent  文件所在的目录
     * @param request
     * @return
     */
    @PostMapping("/uploaddoc")
    public ErrorMessage uploaddoc(MultipartFile doc, @RequestParam String parent, HttpServletRequest request) throws IOException {
        ErrorMessage result = new ErrorMessage();
        MongoDatabase db = mongoTemplate.getDb();
        GridFSBucket bucket = GridFSBuckets.create(db, "docs"); // 打开一个对象,不存在时创建
        GridFSUploadStream uploadStream = bucket.openUploadStream(doc.getOriginalFilename());
        uploadStream.write(doc.getBytes());
        System.out.println(uploadStream.getObjectId());
        uploadStream.close();
      return result;
    }   
/**
     * 下载一个图片文件,显示在前端<img>中
     */
    @GetMapping("/downloadImage/{uuid}")
    public void downloadImage(@PathVariable String uuid, HttpServletResponse response) throws IOException {
//        response.setContentType("image/jpg");//显示,用不着设置它
        MongoDatabase db = mongoTemplate.getDb();
        GridFSBucket bucket = GridFSBuckets.create(db, "docs"); // 打开一个已存在的对象
        // uuid为图片文件在Mongo数据库中的Id
        GridFSDownloadStream downloadStream = bucket.openDownloadStream(new ObjectId(uuid));
        OutputStream outputStream = response.getOutputStream();
        IOUtils.copy(downloadStream, outputStream);
        downloadStream.close();
        outputStream.close();
    }
// 前端部分代码
// http://localhost:8080/downloadImage/5dca4f1d911b52478896430e 是访问后端的接口

// 5dca4f1d911b52478896430e是GridFs对象的ObjectId

<img id="img1" src=""> <button onclick="showImage()">get Image</button> <script> function showImage() { document.getElementById('img1').src='http://localhost:8080/downloadImage/5dca4f1d911b52478896430e'; } </script>

猜你喜欢

转载自www.cnblogs.com/muhu08120559/p/11842162.html