Soumettre un formulaire avec une pièce jointe
Dans cet exemple, nous démontrons comment soumettre un formulaire qui inclut une pièce jointe en utilisant l'API OneEntry.
✅ Objectif du scénario :
- Obtenir la configuration du formulaire depuis la plateforme OneEntry
- L'utilisateur remplit un formulaire (par exemple, réponse, retour d'expérience).
- Attache un fichier (image, CV, document).
- Les données et le fichier sont stockés ensemble dans FormData
- Soumettre les données collectées à l'API OneEntry.
✅ Ce dont vous avez besoin :
- Une PROJECT_URL et un APP_TOKEN valides pour l'authentification avec l'API OneEntry.
- Formulaire dans OneEntry avec un champ de type "Fichier" (type file)
- Marqueur de formulaire (par exemple, resume_form)
📌 Important :
- Ces exemples n'incluent pas la gestion des erreurs.
- Vous pouvez gérer les erreurs en utilisant un bloc try-catch ou en employant une construction comme await Promise.catch((error) => error).
Scénario
1. Importer defineOneEntry depuis le SDK et définir l'URL et le token
Exemple :
import { defineOneEntry } from 'oneentry';
const PROJECT_URL = 'your-project-url';
const APP_TOKEN = 'your-app-token';
2. Créer un client API avec la fonction defineOneEntry()
Exemple :
const { Forms, FormData } = defineOneEntry(PROJECT_URL, {
token: APP_TOKEN,
});
3. Obtenir le formulaire par marqueur depuis OneEntry
Exemple :
const fileForm = await Forms.getFormByMarker('file');
Résultat :
{
"id": 8,
"attributeSetId": 11,
"type": "data",
"localizeInfos": {
"title": "Fichier",
"titleForSite": "",
"successMessage": "Traitement des données réussi",
"unsuccessMessage": "Traitement des données échoué",
"urlAddress": "",
"database": "0",
"script": "0"
},
"version": 0,
"position": 1,
"identifier": "file",
"processingType": "script",
"templateId": null,
"attributes": [
{
"type": "file",
"marker": "file",
"isLogin": null,
"isSignUp": null,
"position": 1,
"settings": {},
"isVisible": true,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Fichier"
},
"additionalFields": [],
"isNotificationEmail": null,
"isNotificationPhoneSMS": null,
"isNotificationPhonePush": null
},
{
"type": "image",
"marker": "image",
"isLogin": null,
"isSignUp": null,
"position": 2,
"settings": {},
"isVisible": true,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Image"
},
"additionalFields": [],
"isNotificationEmail": null,
"isNotificationPhoneSMS": null,
"isNotificationPhonePush": null
},
{
"type": "groupOfImages",
"marker": "images_group",
"isLogin": null,
"isSignUp": null,
"position": 3,
"settings": {},
"isVisible": true,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Groupe d'images"
},
"additionalFields": [],
"isNotificationEmail": null,
"isNotificationPhoneSMS": null,
"isNotificationPhonePush": null
}
],
"moduleFormConfigs": [
{
"id": 3,
"moduleIdentifier": "content",
"isGlobal": false,
"isClosed": false,
"viewOnlyUserData": false,
"commentOnlyUserData": false,
"entityIdentifiers": [
{
"id": "services",
"isNested": false
}
]
}
]
}
4. Obtenir des paramètres supplémentaires pour la soumission du formulaire
Exemple :
const moduleFormConfig = fileForm?.moduleFormConfigs?.[0];
5. Téléchargement d'un fichier avec l'entrée du formulaire=input=file
Envoyer
Données :
// JS
let selectedFiles = null;
// handleFileChange
const handleFileChange = (e: any) => {
selectedFiles = e.target.files;
};
// handleSubmit
const handleSubmit = async (e, file) => {
e.preventDefault();
// 4. Obtenir des paramètres supplémentaires pour la soumission du formulaire
const moduleFormConfig = fileForm?.moduleFormConfigs?.[0];
// 5. Préparation des données du formulaire
const formData = [
{
marker: 'file',
type: 'file',
value: file,
fileQuery: {
type: 'page',
entity: 'editor',
id: 4965,
},
},
];
// 6. Soumettre un formulaire avec FormData.postFormsData()
const postFormResp = await FormData.postFormsData({
formIdentifier: 'file',
formData: formData,
formModuleConfigId: moduleFormConfig?.id || 0,
moduleEntityIdentifier: moduleFormConfig?.entityIdentifiers?.[0]?.id || '',
replayTo: null,
status: 'sent',
});
};
Exemple :
// HTML
<form
onSubmit={(e) => handleSubmit(e, selectedFiles)}
className="flex flex-col gap-3 p-10 border rounded-3xl"
>
<input
type="file"
onChange={handleFileChange}
className="bg-white text-slate-800 p-3 rounded-2xl"
/>
<button
type="submit"
className="bg-white text-slate-800 p-3 rounded-2xl"
>
Envoyer
</button>
</form>
Résultat :
{
"formData": {
"formIdentifier": "file",
"time": "2025-11-10T06:30:56.488Z",
"formData": [
{
"marker": "file",
"type": "file",
"value": [
{
"filename": "files/project/page/4965/editor/4f82c7e0-b1c5-4144-b7dc-202e3b50d357.json",
"downloadLink": "https://your-project.oneentry.cloud/cloud-static/files/project/page/4965/editor/4f82c7e0-b1c5-4144-b7dc-202e3b50d357.json",
"size": 259391
}
]
}
],
"entityIdentifier": "services",
"fingerprint": "UQ_rrofe2",
"isUserAdmin": false,
"formModuleId": 3,
"userIdentifier": null,
"parentId": null,
"id": 119
},
"actionMessage": "Traitement des données réussi"
}
Exemple final
// 1. Importer defineOneEntry depuis le SDK et définir PROJECT_URL et APP_TOKEN
import { defineOneEntry } from 'oneentry';
const PROJECT_URL = 'your-project-url';
const APP_TOKEN = 'your-app-token';
// 2. Créer un client API
const { Forms, FormData } = defineOneEntry(PROJECT_URL, {
token: APP_TOKEN,
});
// 3. Obtenir le formulaire par marqueur depuis OneEntry
const fileForm = await Forms.getFormByMarker('file');
// 3.1 Téléchargement d'un fichier avec l'entrée du formulaire=input=file
// JS
const selectedFiles = [];
const handleFileChange = (e) => {
selectedFiles = e.target.files;
};
// handleSubmit
const handleSubmit = async (e, file) => {
e.preventDefault();
// 4. Obtenir des paramètres supplémentaires pour la soumission du formulaire
const moduleFormConfig = fileForm?.moduleFormConfigs?.[0];
// 5. Préparation des données du formulaire
const formData = [
{
marker: 'file',
type: 'file',
value: file,
fileQuery: {
type: 'page',
entity: 'editor',
id: 4965,
},
},
];
// 6. Soumettre un formulaire avec FormData.postFormsData()
const postFormResp = await FormData.postFormsData({
formIdentifier: 'file',
formData: formData,
formModuleConfigId: moduleFormConfig?.id || 0,
moduleEntityIdentifier: moduleFormConfig?.entityIdentifiers?.[0]?.id || '',
replayTo: null,
status: 'sent',
});
};
// HTML
<form
onSubmit={(e) => handleSubmit(e, selectedFiles)}
className="flex flex-col gap-3 p-10 border rounded-3xl"
>
<input
type="file"
onChange={handleFileChange}
className="bg-white text-slate-800 p-3 rounded-2xl"
/>
<button
type="submit"
className="bg-white text-slate-800 p-3 rounded-2xl"
>
Envoyer
</button>
</form>