سلام
میخوام عکس رو از ری اکت به سرور بفرستم...
توی فرانت وقتی لاگ تصویر رو میگیرم دیتای عکس رو میتونم بگیرم ولی وقتی به سرور میفرستم اصلا تصویری دریافت نمیشه.
برای دیکود کردن تصویر از روش زیر استفاده میکنم ولی تصویر به درستی ذخیره نمیشه
کنترلر:
// اطلاعات تصویر آپلود شده رو میگیرم
$imageData = decodeBase64File($request->image);
$extension = $imageData['ext'];
$file = $imageData['file'];
$size = $imageData['size'];
// اسم فایل رو انتخاب میکنم
$imageName = 'uploaded_image_' . time() . $extension;
// فایل رو یه جایی که میخوام ذخیره می کنم
Storage::disk('public')->put('images/' . $imageName, $file);
$file = str_replace(' ', '+', $request->image);
$file = substr($file, strpos($file, ';base64,') + 8);
$decodedFile = base64_decode(json_encode($file));
هلپر برای دیکود کردن تصویر:
function decodeBase64File( $encodedFile )
{
// اینجا اطلاعات اضافی رو پاک میکنم تا کد اصلی رو بگیرم
$file = strreplace(' ', '+', $encodedFile );
$file = substr( jsonencode($file), strpos(jsonencode($file),';base64,' ) + 8 );
$decodedFile = base64decode($file);
// با کمک توابع پی اچ پی، مشخصات فایل رو بررسی می کنم
$fileMimeType = finfo_buffer( finfo_open() , $decodedFile , FILEINFO_MIME_TYPE );
$fileExt = substr($fileMimeType, strpos($fileMimeType,'/')+1);
return [
'file' => $decodedFile, // فایل آماده برای ذخیره سازی در دیسک
'mime' => $fileMimeType, // نوع فایل
'ext' => $fileExt, // اکستنشن فایل
'size' => (int)strlen( $decodedFile ) // حجم فایل با واحد بایت
];
}
این هم فرانت:
formData.append('image',event.target.image.files[0]);
formData.append('img_title',img_title);
console.log(event.target.image.files[0]);
await axios.post(
'http://127.0.0.1:8000/api/v1/villa/store/saveImg/25',
formData
)
.then(function (response) {
console.log(response.data);
})
.catch(function (error) {
console.log(error);
});
}
jsx:
<form onSubmit={e => updateData(e)}>
<input type="file" name="image"
/>
<input type="text" name="img_title" value={img_title}
onChange={e => setImgTitle(e.target.value)}
/>
<button>Update</button>
</form>
روش راحتتری نیست برای ذخیره این نوع تصاویر؟
ممنون میشم راهنمایی کنید
@safakh
خالیه متاسفانه {}
انگار چیزی ارسال نمیشه به سرور...
در حالی که وقتی توی فرانت لاگ میگیرم میتونم دیتای تصویر رو ببینم
حالا اگه بصورت معمولی ذخیره کنم میشه؟؟یعنی همون حالتی که بدون api تصاویر رو ذخیره میکنم؟
سلام
@shirzad
headers: {
'Content-Type': 'multipart/form-data',
}
احتمال زیاد به خاطر headers هست که همراه ریکوئست ارسال نمی کنید
await axios.post('http://127.0.0.1:8000/api/v1/villa/store/saveImg/25', formData, {
headers: {
'Content-Type': 'multipart/form-data',
},
})
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟