Как отобразить изображение в react, используя данные из mysql, созданные xampp

#mysql #reactjs #xampp

#mysql #reactjs #xampp

Вопрос:

Я использовал nodejs и xampp для создания сервера. В Xampp для изображения я использовал Blob long. Используя react в качестве интерфейса, я извлек изображение. Я присвоил эти данные img изображению src, но оно не отображается. Проверьте src изображения, покажите длинный ряд чисел.

 import React, { useEffect, useState } from "react";

export default function QueryData() {
  const [backenddata, setBackenddata] = useState([]);

  async function fetchData(url) {
    const response = await fetch(url);
    const result = await response.json()
    setBackenddata(result);
  }

  useEffect(() => {
    let url = "http://localhost:3001/"; //xampp server
    fetchData(url);
  }, []);
    
  return (
    <div>
      <img src={backenddata[0]?.ProductImage.data} />
    </div>
  );
}
  

Ответ №1:

Если вы используете blob, вам необходимо преобразовать ваши данные в base64 с помощью следующего кода, тогда вы можете использовать Base64 в вашем теге img src

 import React, { useEffect, useState } from "react";

export default function QueryData() {
  const [backenddata, setBackenddata] = useState([]);

  async function fetchData(url) {
    const response = await fetch(url);
    const result = await response.json()
    // result.data should be as arrayBuffer type
    let base64String = btoa(String.fromCharCode(...new Uint8Array(result.data)));
    setBackenddata(base64String);
  }

  useEffect(() => {
    let url = "http://localhost:3001/"; //xampp server
    fetchData(url);
  }, []);
  
  return (
    <div>
      <img src={backenddata} />
    </div>
  );
}


  

это пример того, как выглядит ArrayBuffer
введите описание изображения здесь

Комментарии:

1. Привет, Тито, спасибо за ответ. Мне удалось преобразовать его в base64

2. теперь src изображения равен

3. можете ли вы поделиться ответом API?

Ответ №2:

Причина, по которой изображение не отображалось, потому что закодированный base64 был неправильным. Вы можете проверить свои результирующие данные base64, сравнив их с данными изhttp://jpillora.com/base64-encoder /

Изначально я использовал этот метод для преобразования в bass64

 var blob = new Blob(backenddata[0]?.ProductImage.data, {
  type: "image/jpeg",
});
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function () {
  let base64String = reader.result;
  setImagesrc(base64String); //assigned to state. This base64 value was wrong compared to data from http://jpillora.com/base64-encoder/
};
  

Итак, я изменил приведенный ниже код, и он был правильным и таким же, какhttp://jpillora.com/base64-encoder /

   var base64String = btoa(
    String.fromCharCode(...new Uint8Array(backenddata[0]?.ProductImage.data))
  );
  setImagesrc(base64String);