简体   繁体   English

通过 axios 获取图像如何显示在我的反应项目上

[英]get image through axios how to display on my react project

i have a image object that is getting through axios and how to retrive my image from this object and how to display it in my react project.我有一个图像 object 正在通过 axios 以及如何从这个 object 中检索我的图像以及如何在我的 React 项目中显示它。 i am using this object in "" tag but its not working...我在“”标签中使用这个 object 但它不起作用......

 import React, { useState } from "react"; import Axios from "axios"; function MyUploader() { const [image, setImage] = useState(""); const getimage = () => { Axios.get("http://localhost:4000/getAllPosts").then((res) => { let result = (res && res.data && res.data[0].file) || []; setImage(result[0]); }); }; return ( <div className="App"> <img src={image} alt=""/> <button onClick={getImage}>getdata</button> </div> ); }

there is my data object in which availabel of images array as the name of "files" that i am getting from axios request.有我的数据 object,其中可用图像数组作为我从 axios 请求中获取的“文件”的名称。 and my question is this that how to display images in my project...我的问题是如何在我的项目中显示图像......

 { category: "women" colors: (3) ['yellow', 'gray', 'green'] createdAt: "2021-10-03T18:13:02.711Z" description: "Lorem Ipsum is simply dummy text of" discount: 10 file: Array(3) 0: {fieldname: 'file', originalname: 'WhatsApp Image 2021-09-08 at 11.54.30 AM.jpeg', encoding: '7bit', mimetype: 'image/jpeg', destination: './public/newPostData/', …} 1: {fieldname: 'file', originalname: 'WhatsApp Image 2021-09-07 at 10.50.05 PM.jpeg', encoding: '7bit', mimetype: 'image/jpeg', destination: './public/newPostData/', …} 2: {fieldname: 'file', originalname: 'WhatsApp Image 2021-09-07 at 12.25.49 PM.jpeg', encoding: '7bit', mimetype: 'image/jpeg', destination: './public/newPostData/', …} length: 3 [[Prototype]]: Array(0) id: 1 name: "Flare Dress" new: true pictures: (4) ['/assets/images/fashion/product/1.jpg', '/assets/images/fashion/product/21.jpg', '/assets/images/fashion/product/36.jpg', '/assets/images/fashion/product/12.jpg'] price: 12000 rating: 4 sale: true salePrice: 20000 shortDetails: "Sed ut perspiciatis, unde omnis iste natu" size: (3) ['M', 'L', 'XL'] stock: 16 tags: (2) ['nike', 'caprese'] updatedAt: "2021-10-03T18:13:02.711Z" variants: (3) [{…}, {…}, {…}] __v: 0 _id: "6159f2ae77433b2df4e1ee43" }

Change your getImage method to this:将您的getImage方法更改为此:

const getImage = () => {
  Axios.get("http://localhost:4000/getAllPosts", {
      responseType: "arraybuffer"
    })
    .then((res) => {
    const base64 = btoa(
      new Uint8Array(res.data).reduce(
        (data, byte) => data + String.fromCharCode(byte),
        ''
      )
    )
    setImage(base64)
  })
}

Usage:用法:

<img src={`data:;base64,${image}`} />

// or

<img src={`data:image/jpeg;charset=utf-8;base64,${image}`} />

It's not really a good practice to mess up binary data with metadata.将二进制数据与元数据混为一谈并不是一个好习惯。 Better to have an endpoint that would return binary and right headers for browser to display it like that:最好有一个端点可以为浏览器返回二进制和正确的标头,以便像这样显示它:

<img src="https://yourapi.com/image/2"/>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM