summary: i want to send a file from react to laravel and then save it in share point
what I’ve already done: I’ve already managed this process in another app using “append” from react and it was working
problem: I don’t want to use append ( const formData = new FormData();
) because “datas” is a large object with lots of nested values. I have also tried to add ‘append’ but I get an empty object when requesting axios. Without using append, i don’t got my file data in laravel.
my question: is it possible to send a file client to server without using append ( const formData = new FormData();
)?
For the form I use react with redux toolkit.
To send the datas to mongodb i use laravel
I know that append method allows you to add key-value pairs to the formData object and allows you to receive and process the files in laravel but do I have another option ?
This is my submit and axios request
const onSubmit = (data) => {
const datas = data.internOrders;
dispatch(postInternOrder(datas, userData));
};
export const postInternOrder = (datas, userData) => async (dispatch) => {
dispatch(setLoading(true));
try {
await axios({
method: 'post',
url: `${process.env.REACT_APP_API_URL}api/order/intern`,
data: datas,
}).then((res) => {
console.log(res.data);
dispatch(setOpen(true));
});
} catch (err) {
console.log(err);
dispatch(setError(true));
}
dispatch(setLoading(false));
};
This is my create function in laravel
public function createInternOrder(Request $request)
{
if ($request) {
$driveId = env('DRIVE_ID');
$driveUrl = env('DRIVE_URL');
$drivePath = env('DRIVE_PATH');
$clientId = env('CLIENT_ID');
$clientSecret = env('CLIENT_SECRET');
$files = $request->file('files');
// Obtenir le jeton d'accès
if ($files) {
$responseToken = Http::asForm()->post(
'https://login.microsoftonline.com/8289/oauth2/v2.0/token',
[
'grant_type' => "client_credentials",
'client_id' => $clientId,
'client_secret' => $clientSecret,
'scope' => "https://graph.microsoft.com/.default",
]
);
$tokenJson = json_decode($responseToken->getBody()->getContents());
$token = $tokenJson->access_token;
$fileName = $files->getClientOriginalName();
$response = Http::withToken($token)->withBody(
$files->getContent(),
$files->getMimeType()
)->put($driveUrl . $driveId . $drivePath . $fileName . ':/content');
$responseJson = json_decode($response->getBody()->getContents());
$sharePointUrl = $responseJson->webUrl;
} else {
$fileName = '';
$sharePointUrl = '';
}
$internOrders = InternOrders::create([
'History' => $request->get('history'),
'Urls' => $request->get('urls'),
'Amount' => $request->get('amount'),
'BusinessUnit' => $request->get('businessUnit'),
'Comment' => $request->get('comment'),
'DeliveryAdress' => $request->get('deliveryAdress'),
'Entity' => $request->get('entity'),
'Express' => $request->get('express'),
'ExpressObject' => $request->get('expressObject'),
'Object' => $request->get('object'),
'Paiement' => $request->get('paiement'),
'Referent' => $request->get('referent'),
'Status' => $request->get('status'),
'Type' => $request->get('type'),
'UserMail' => $request->get('userMail'),
'UserName' => $request->get('userName'),
"IdSP" => $request->get("idSP"),
"SPUrl" => $request->get("sharePointUrl")
]);
if ($internOrders) {
$internOrders->save();
return ["result" => " Orders has been saved successfully"];
} else {
return ["result" => "failed to save"];
}
}
}
Here trying to add append :
const onSubmit = (data) => {
const datas = data.internOrders;
const formData = new FormData();
formData.append('internOrders', datas)
formData.append('file', data.files);
dispatch(postInternOrder(formData, userData));
};
but then, if I log the “$request” in laravel i got empty object (FormData {})