node实现minio图片读取和展示

9 篇文章 0 订阅

简述

目的在于实现一个vue读取minio图片资源的功能

效果展示

在这里插入图片描述

读取图片

这里从minio读取图片,将图片转变成base64数据流,如何不知道如何安裝minio庫可以參考我[上一篇文章(minio的圖片上傳)]。(https://blog.csdn.net/weixin_73368873/article/details/130039287)

const express = require('express')
const router = express.Router()
var Minio = require('minio')
const fs = require('fs');
// Instantiate the minio client with the endpoint
// and access keys as shown below.
var minioClient = new Minio.Client({
    endPoint: 't1', //这里不能带http或者https
    port: 9000,
    useSSL: false, //不需要https
    accessKey: 'admin', //账号密码同web登陆时一致
    secretKey: 'admin123'
});


router.get('/myInfo', function(req, res) {
    const bucketName = 'btest2' // 替换为您的存储桶名称
    const objectName = 'm2.png' // 替换为您的图片文件名
  // 获取指定存储桶中的对象,并将其内容作为Buffer返回
minioClient.getObject(bucketName, objectName, (err, dataStream) => {
    if (err) {
      console.log(err)
      return res.status(500).send({ error: 'Failed to get image' })
    }

    let chunks = []

    // 将数据流转换成Buffer
    dataStream.on('data', chunk => {
      chunks.push(chunk)
    })

    dataStream.on('end', () => {
      const buffer = Buffer.concat(chunks)

      // 将Buffer转换为Base64字符串
      const base64String = buffer.toString('base64')
      console.log("返回图片")

      // 将Base64字符串作为JSON响应发送回客户端
      return res.send({ data: 'data:image/png;base64,' + base64String })
    })
  })


})


  module.exports = router

前端读取数据流

异步获取base64数据流,转化为image的src资源,這樣直接轉化就非常自然了
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Spring Boot与Vue.js集成,并使用MinIO存储和读取图片或视频,可以按照以下步骤操作: 1. 后端实现 首先,你需要在Spring Boot中集成MinIO客户端,以便从MinIO读取文件。你可以使用MinIO Java SDK来实现这一点。然后,你需要在Spring Boot中实现一个REST API,该API可以接收前端发送的请求,并从MinIO读取文件,然后将文件返回给前端。 例如,你可以实现一个REST API,其URL为`/api/file/{filename}`,其中`{filename}`是要从MinIO读取的文件名。在该API中,你可以使用MinIO Java SDK从MinIO读取文件,然后将文件内容返回给前端。以下是一个可能的实现: ```java @RestController @RequestMapping("/api") public class FileController { private final MinioClient minioClient; public FileController(MinioClient minioClient) { this.minioClient = minioClient; } @GetMapping("/file/{filename}") public ResponseEntity<byte[]> getFile(@PathVariable String filename) throws Exception { InputStream inputStream = minioClient.getObject("bucket-name", filename); byte[] bytes = IOUtils.toByteArray(inputStream); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.IMAGE_JPEG); // 设置Content-Type为图片类型 return new ResponseEntity<>(bytes, headers, HttpStatus.OK); } } ``` 2. 前端实现Vue.js中,你可以使用`axios`库来发送请求获取后端API返回的文件内容,并将其显示在页面上。以下是一个可能的实现: ```vue <template> <div> <img :src="imageSrc" /> <video :src="videoSrc" controls></video> </div> </template> <script> import axios from 'axios'; export default { data() { return { imageSrc: '', videoSrc: '', }; }, mounted() { axios.get('/api/file/image.jpg', { responseType: 'blob' }).then((response) => { const reader = new FileReader(); reader.readAsDataURL(response.data); reader.onload = () => { this.imageSrc = reader.result; }; }); axios.get('/api/file/video.mp4', { responseType: 'blob' }).then((response) => { const reader = new FileReader(); reader.readAsDataURL(response.data); reader.onload = () => { this.videoSrc = reader.result; }; }); }, }; </script> ``` 在上面的代码中,我们使用`axios`库发送GET请求获取图片和视频文件的内容,并将其转换为Base64编码的字符串,然后将其分别赋值给`imageSrc`和`videoSrc`变量,从而在页面上显示图片和视频。注意,我们需要将`responseType`设置为`blob`,以便获取文件的原始二进制数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值