Advertisement
Guest User

Untitled

a guest
Jan 4th, 2025
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 4.46 KB | Source Code | 0 0
  1. import { useState } from "react"
  2.  
  3. export default function UploadPage() {
  4.   const [files, setFiles] = useState([])
  5.   const [isUploading, setIsUploading] = useState(false)
  6.   const [response, setResponse] = useState(null)
  7.   const [inscricaoId, setInscricaoId] = useState(2) // ID da inscrição que você quer atualizar
  8.  
  9.   const handleFileChange = (e) => {
  10.     setFiles(e.target.files) // Permite múltiplos arquivos
  11.   }
  12.  
  13.   const handleSubmit = async (e) => {
  14.     e.preventDefault()
  15.  
  16.     if (files.length === 0) {
  17.       alert("Por favor, selecione pelo menos um arquivo.")
  18.       return
  19.     }
  20.  
  21.     setIsUploading(true)
  22.  
  23.     try {
  24.       // Criar FormData e adicionar arquivos
  25.       const formData = new FormData()
  26.       Array.from(files).forEach((file) => {
  27.         formData.append("files", file) // Adicionando cada arquivo
  28.       })
  29.  
  30.       // Adicionar os metadados ao FormData
  31.       formData.append("ref", "api::inscricao.inscricao") // Nome da coleção onde o arquivo será armazenado
  32.       formData.append("refId", inscricaoId) // ID da inscrição a ser atualizada
  33.       formData.append("field", "fileLink") // Campo onde o arquivo será armazenado (no caso, fileLink)
  34.  
  35.       // Enviar requisição para o Strapi e obter os arquivos carregados
  36.       const uploadRes = await fetch("http://localhost:1337/api/upload", {
  37.         method: "POST",
  38.         body: formData,
  39.       })
  40.  
  41.       if (!uploadRes.ok) {
  42.         throw new Error("Erro ao fazer o upload dos arquivos")
  43.       }
  44.  
  45.       const uploadData = await uploadRes.json()
  46.       console.log("uploadData", uploadData)
  47.  
  48.       // Verificando se os dados de 'ficheiro' são retornados corretamente
  49.       if (uploadData) {
  50.         // Obter os dados atuais da inscrição
  51.         const inscricaoRes = await fetch(
  52.           `http://localhost:1337/api/inscricoes/${inscricaoId}?populate[fileLink][populate][ficheiro][fields]=name,width,height,hash,ext,mime,size,url,provider`
  53.         )
  54.         const inscricaoData = await inscricaoRes.json()
  55.  
  56.         console.log("inscricaoData")
  57.         console.log(inscricaoData)
  58.  
  59.         // Atualizar a lista de arquivos, mantendo os antigos e adicionando os novos
  60.         // try to hard write the media fields kkkk
  61.         const existingFiles = inscricaoData.data.attributes.fileLink || []
  62.  
  63.         const fileIds = [
  64.           ...existingFiles, // Manter os arquivos existentes
  65.           ...uploadData.map((file) => ({
  66.             titulo: file.name, // Nome do arquivo
  67.             publico: true,
  68.             ficheiro: {
  69.               data: {
  70.                 attributes: {
  71.                   id: file.id, // ID do arquivo
  72.                   name: file.name,
  73.                   url: file.url, // Certifique-se de que o campo `url` esteja sendo retornado
  74.                   mime: file.mime, // Tipo MIME do arquivo
  75.                   size: file.size, // Tamanho do arquivo
  76.                 },
  77.               },
  78.             },
  79.           })),
  80.         ]
  81.  
  82.         // Preparar o objeto de dados para atualizar a inscrição
  83.         const data = {
  84.           data: {
  85.             fileLink: fileIds, // Associando arquivos à inscrição
  86.           },
  87.         }
  88.  
  89.         // Atualizar a inscrição com os arquivos carregados
  90.         const res = await fetch(
  91.           `http://localhost:1337/api/inscricoes/${inscricaoId}`,
  92.           {
  93.             method: "PUT",
  94.             headers: {
  95.               "Content-Type": "application/json",
  96.             },
  97.             body: JSON.stringify(data),
  98.           }
  99.         )
  100.  
  101.         if (!res.ok) {
  102.           throw new Error("Erro ao associar os arquivos à inscrição")
  103.         }
  104.  
  105.         const responseData = await res.json()
  106.         setResponse(responseData) // Exibir a resposta com os dados atualizados
  107.       } else {
  108.         throw new Error("Dados de arquivo não foram retornados corretamente.")
  109.       }
  110.     } catch (error) {
  111.       console.error(error)
  112.       alert("Erro no upload. Tente novamente.")
  113.     } finally {
  114.       setIsUploading(false)
  115.     }
  116.   }
  117.  
  118.   return (
  119.     <div>
  120.       <h1>Upload de Arquivo(s)</h1>
  121.       <form onSubmit={handleSubmit}>
  122.         <input type="file" onChange={handleFileChange} multiple />
  123.         <button type="submit" disabled={isUploading}>
  124.           {isUploading ? "Enviando..." : "Enviar"}
  125.         </button>
  126.       </form>
  127.  
  128.       {response && (
  129.         <div>
  130.           <h2>Resposta do Strapi:</h2>
  131.           <pre>{JSON.stringify(response, null, 2)}</pre>
  132.         </div>
  133.       )}
  134.     </div>
  135.   )
  136. }
  137.  
Tags: strapi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement