J'essaie d'envoyer un ou plusieurs fichiers (pdf, doc, xls, txt ...) après les avoir stockés dans l'état du composant, à l'aide de hooks, à une API. Les fichiers sont enregistrés avec un "type" de fichier, quelque chose comme ce qui suit:
L'objet d'état est composé du nom de fichier (clé) et à l'intérieur de sa clé se trouve le fichier (ajouté à l'aide de react-dropzone) et le type de fichier (un nombre)
J'ai essayé d'envoyer les fichiers en utilisant formData mais en essayant de faire la requête POST, j'obtiens une erreur 402 {"status": "fail", "data": [{"files": "The files field is required."} ]}
C'est ce que j'essaye:
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
const [files, setFiles] = useState({}); const sendFiles = () =>{ let headers = { Authorization: token }; let data = new FormData(); //files is my state for(let key in files){ data.append(key, files[key]) } axios .post( "/some-url/new-files", { report_id:6, //This is necessary files: data }, { headers } ) .then(response => { let { data } = response.data; console.log(data); }) .catch(error => { console.log(error) }); } }
3 Réponses :
Ajouter aux en-têtes Content-Type multipart / form-data,
axios.post('upload_file', formData, { headers: { 'Content-Type': 'multipart/form-data' } })
Comment puis-je combiner cela avec les "en-têtes" que j'avais déjà (un jeton nécessaire pour pouvoir utiliser l'API)?
Cause I get this error: Missing boundary in multipart / form-data POST data
let headers = { Authorization: token, "Content-Type": "application/json", };
merci, mais j'obtiens toujours l'erreur: 422 {"status": "fail", "data": [{"files": "Le champ des fichiers est obligatoire."}]}
let headers = { Authorization: "token", 'Content-Type':'multipart/form-data' }; let formData = new FormData(); for(let key in files){ formData.append('files[][file]', files[key].file, files[key].file.name) formData.append('files[][file_type_id]', files[key].fileType) } axios .post( "/api/files", formData, { headers } ) .then(()=>{console.log('It Works')})