Как я могу реализовать cloudinary для динамического отображения изображений в качестве фона? Я не вижу, чтобы правильно их забрать

#javascript #reactjs #background #cloudinary

Вопрос:

Мне было интересно, почему я не могу получить изображение из cloudinary,я хочу опубликовать изображение в качестве фона, очевидно, я неправильно извлекаю изображение.

 
function Post({post}){

    return(
        <div className='PostBlock' 
        style={{backgroundImage: `url(${post.getImage})`}}>
          
              <div>
              {console.log(post.getImage)} 
            <h3>genere:{post.getGenere}</h3>
           
            </div>
             <div>
                 <h3>Title: {post.getTitle}</h3>
            </div>
            
            <div>
            <p>{post.getBody}</p>
        
            </div>
            
        </div>
    )
}

export default Post

 

моя форма сообщения, которая является модальной,здесь я успешно загружаю свои изображения после нажатия кнопки «Сохранить сообщение», хотя проблема заключается в извлечении и отображении URL-адреса изображения, что, по-видимому, я делаю неправильно, прокрутите вниз до фрагмента кода компонента «Опубликовать».

 
import { useState } from "react"
import Axios from "axios"



function PostFormModal({onAdd}){
 
let [getGenere,setGenere]=useState('Travel')
const [getTitle,setTitle]=useState('')
const [getBody,setBody]=useState('')
let [getImage,setImage]=useState('')

   const uploadImage = () => {
    const formData = new FormData()
    formData.append("file",getImage)
    formData.append("upload_preset","ddyy5zbx")

    Axios.post("https://api.cloudinary.com/v1_1/dk5lv4qj5/image/upload",formData)
    .then((res)=>console.log(res))
    .catch((e)=>console.log(e))
}

    //const genere = ['Travel','LifeStyle','Business','Food','Work']
        
        
    const onSubmit=(e)=>{
        e.preventDefault()
        onAdd({getGenere,getTitle,getBody,getImage})
    }

return( 

        <div className='formStyle' >
            <form onSubmit={onSubmit} >
                <div className="formStyleInner">
                    <label>Choose a genere: </label>
                    <select value={getGenere} onChange={e=>setGenere(e.target.value)}>
                        <option value='Travel'>Travel</option>
                        <option value='Lifestyle'>LifeStyle</option>
                        <option value='Business'>Business</option>
                        <option value='Food'>Food</option>
                        <option value='Work'>Work</option>
                    </ select>
               </div>

                <div className="formStyleInner">
                    <label>Title:</label>
                        <input type="text"
                        value={getTitle}
                                placeholder='add a title!'
                                onChange={(e)=>setTitle(e.target.value)}> 
                        </input>
                </div>
                
                <div className="formStyleInner">
                    <label>Background Image:</label>
                        <input type="file"
                                onChange={(e)=>setImage(e.target.files[0])}> 
                               
                        </input>
                      
                </div>

                <div className="formStyleInner">
                       
                    <textarea type='textarea'
                        rows='10'
                        cols="35"
                        value={getBody}
                        placeholder='add text!'
                        onChange={(e)=>setBody(e.target.value)}>
                       
                    </textarea>
                </div>
                    <input type="submit" value="Save post" onClick={uploadImage}/>
            </form>
        </div>
    )
}

export default PostFormModal

 

here’s my App()

 import { useState } from "react";
import PostList from "./component/PostList";
import PostModalBtn from "./component/postModalBtn";
import PostFormModal from "./component/PostFormModal";
import FilterButton from "./component/FilterButton";
//Filter MAP

const FilterMap = {
  All:() => true,
  Travel: genSel => genSel.Travel,
  LifeStyle:genSel=> genSel.LifeStyle,
  Business:genSel=> genSel.Business,
  Food:genSel=> genSel.Food,
  Work:genSel=>genSel.Work
  
}

const FilterNames=Object.keys(FilterMap)
   


function App({onAdd}) {
const [isModalDisplayed,setIsModalDisplayed]=useState(false)
const[filter, setFilter]= useState('All')
const[posts,setPosts]=useState(
  [
    {
      id:1,
      getTitle:'Titulo Generico',
      getGenere:'Travel',
      getBody:'Prueba de body'
    },

  ]
 )
 
//FilterList

const filterList =  FilterNames.map(name=>(
  <FilterButton 
    key={name}
    name={name}
    isPressed={name === filter}
    setFilter={setFilter}/>
))

 //addPost action

 const addPost = (post)=>{
   const id= Math.floor(Math.random()*1000) 1
   const getPost = {id,...post}
   setPosts([...posts,getPost])
 }
  return (
  <>
        <div className='headerTitle'>
          <h5>Making your life easier</h5>
        </div>
        <div className='titleCont'>
          <h1>Discovering the world</h1>
        </div>
        <div className='FilterBtnStyle'>
         {filterList}
        </div>
          <div className='buttonCont'>
           <PostModalBtn onClick={onAdd}/>
        </div>
            <PostFormModal onAdd={addPost}/>
        
        <PostList posts={posts}/>
 </>
  );
}

export default App;

 

Компонент «Post», это то место, где фоновое изображение должно динамически выводиться, очевидно, я неправильно его называю, потому что оно не выбирает правильный путь…

 function Post({post}){

    return(
        <div className='PostBlock' 
        style={{backgroundImage: `url(${post.getImage})`}}>
          
              <div>
              {console.log(post.getImage)} 
            <h3>genere:{post.getGenere}</h3>
           
            </div>
             <div>
                 <h3>Title: {post.getTitle}</h3>
            </div>
            
            <div>
            <p>{post.getBody}</p>
        
            </div>
            
        </div>
    )
}

export default Post
 

Проверяя загрузку с консоли, мы видим, что у объекта, загруженного в cloudinary, действительно есть URL-адрес, который мы можем использовать

проверка загрузки

На самом деле я извлекаю объект, добавленный к «getImage», а не «URL». введите описание изображения здесь

Из того, что я читал, я не могу выводить изображения из cloudinary, если не использую тег IMAGE из библиотек cloudinary-react и cloudinary-core, но я понятия не имею, как реализовать это в фоновом изображении

Ответ №1:

После загрузки изображения в Cloudinary вы можете использовать URL-адрес изображения, как и любой другой URL-адрес изображения, для отображения изображения на HTML-странице. Однако, если вы хотите использовать любой из вспомогательных методов Cloudinary, следует использовать public_id, который является именем изображения на Cloudinary, которое в данном случае начинается с mqrhnpw.. (последняя часть URL-адреса Cloudinary после номера версии).

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

1. Спасибо за ваш ответ, моя проблема заключается в его динамическом добавлении,мне нужно получить доступ к строке URL(или secure_url), о которой я понятия не имею, как это сделать, все, что я знаю, это то, что «ответ» возвращает объект, у которого есть ключ данных, у которого есть » url » и «secure_url», мне нужно отправить это как свойство.