راکت
json
json
5 سال پیش توسط json مطرح شد
5 پاسخ

ارسال عکس از ری اکت به لاراول

سلام
میخوام عکس رو از ری اکت به سرور بفرستم...
توی فرانت وقتی لاگ تصویر رو میگیرم دیتای عکس رو میتونم بگیرم ولی وقتی به سرور میفرستم اصلا تصویری دریافت نمیشه.
برای دیکود کردن تصویر از روش زیر استفاده میکنم ولی تصویر به درستی ذخیره نمیشه

کنترلر:

// اطلاعات تصویر آپلود شده رو میگیرم
        $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>

روش راحتتری نیست برای ذخیره این نوع تصاویر؟
ممنون میشم راهنمایی کنید


ثبت پرسش جدید
مصطفی خراشادی زاده
مصطفی خراشادی زاده
@safakh5 سال پیشمطرح شد
0

سلام @shirzad
خروجی این کد رو هم قرار بدید

dd($request->image);

json
json
تخصص :آزاد
@JSON5 سال پیشمطرح شد
0

@safakh
خالیه متاسفانه {}
انگار چیزی ارسال نمیشه به سرور...
در حالی که وقتی توی فرانت لاگ میگیرم میتونم دیتای تصویر رو ببینم
حالا اگه بصورت معمولی ذخیره کنم میشه؟؟یعنی همون حالتی که بدون api تصاویر رو ذخیره میکنم؟


سیدعلی موسوی
سیدعلی موسوی
تخصص :سی شارپ و پی اچ پی
@juza665 سال پیشمطرح شد
0

اینو اضاف کن به فرم بعد تست بگیر

enctype="multipart/form-data"

مهدی مهدوی
مهدی مهدوی
تخصص :تازه وارد
@mehdi.mahdavi975 سال پیشمطرح شد
1

سلام
@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',
      },
    })

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام