Mr.w120112 2024-04-25 21:22 采纳率: 0%
浏览 17

java的ssm框架后端,前段vue上传图片保存到mysql并提取在前端展示

img


如何将上图的图片数据在vue前端展示出来
图片数据包含在返回值的data中

img


自己写的代码但是图片不能显示不知道什么原因求指点

img


imgurl打印的显示

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-25 21:22
    关注

    引自免费微信小程序:皆我百晓生

    首先,确保你在服务器端已经正确地处理了图片文件,并将其作为二进制数据存储到了MySQL数据库中。对于SSM(Spring Boot + Spring MVC + MyBatis)框架,你需要创建一个RESTful API接口,用于从数据库获取图片的二进制数据。

    在Java后端,你需要创建一个Controller方法来提供图片数据。这里是一个简单的例子:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.sql.Blob;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    @RestController
    public class ImageController {
    
        @Autowired
        private YourMapper yourMapper; // 假设这是你的MyBatis映射器
    
        @GetMapping("/image/{id}")
        public ResponseEntity<byte[]> getImage(@PathVariable Long id) throws SQLException {
            ResultSet resultSet = yourMapper.getImageById(id);
            if (resultSet.next()) {
                Blob blob = resultSet.getBlob("chetupian");
                byte[] imageData = blob.getBytes(1, (int) blob.length());
                
                BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(imageData));
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                ImageIO.write(bufferedImage, "jpg", outputStream);
                return ResponseEntity.ok().contentType(MediaType.IMAGE_JPEG).body(outputStream.toByteArray());
            } else {
                throw new ResourceNotFoundException("Image not found with ID: " + id);
            }
        }
    }
    

    这段代码中,yourMapper.getImageById(id) 是一个从数据库查询图片的方法,具体实现依赖于你的MyBatis配置。

    接下来,在Vue.js前端,你需要调用这个API来获取图片数据,然后设置为<img>标签的src属性。可以使用axios库来发送HTTP请求:

    首先安装axios库(如果你还没有安装的话):

    npm install axios
    

    然后在Vue组件中使用它:

    <template>
      <div>
        <img :src="imageUrl" alt="Uploaded Image">
      </div>
    </template>
    
    <script>
    import axios from 'axios';
    
    export default {
      data() {
        return {
          imageUrl: '',
        };
      },
      methods: {
        async loadImage(id) {
          try {
            const response = await axios.get(`/api/image/${id}`);
            this.imageUrl = window.URL.createObjectURL(new Blob([response.data], { type: 'image/jpeg' }));
          } catch (error) {
            console.error('Error loading image:', error);
          }
        },
      },
      mounted() {
        // 假设你想加载id为1104的图片
        this.loadImage(1104);
      },
    };
    </script>
    

    在这个Vue组件中,我们定义了一个loadImage方法,它会异步地调用 /api/image/:id 这个URL来获取图片数据。然后,我们使用 window.URL.createObjectURL() 方法将二进制数据转换为一个可访问的URL,最后把这个URL赋给<img>标签的src属性。

    这样,你应该能够在页面上看到从数据库中获取的图片了。注意,这里的示例是针对JPEG格式的图片,如果图片是其他格式,你需要相应地调整ImageIO.write()方法中的参数。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月25日

悬赏问题

  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)