• 0

هل من الممكن رفع ملع في ميثود PUT في POSTMAN

السلام عليكم،

أستخدم postman في عمل test على الapi الخاصة بي..

أستخدم apiResources() كالتالي

Route::apiResource('certificates', 'CertificateController');

فأريد التعديل على الcertificate ومن البديهي أنه عندم أرسل PUT Request إلى http://localhost:8000/api/certificates/4 سيتم إستدعاء ميثود update في الكنترولر

public function update(Request $request, $id)
{
  $certificate = Certificate::find($id);

  if (!$certificate) {
  	return $this->returnData(false, 'Certificate Not Found', 404);
  }

  $validation = Validator::make($request->all(), [
    'certificate_name_ar' => 'required|max:150|min:3',
    'certificate_name_en' => 'required|max:150|min:3',
  ]);

  if ($validation->fails()) {
  	return $this->returnData(false, $validation->errors(), 400);
  }

  if ($request->hasFile('certificate_file')) {

    $allowed_extensions = ['jpg', 'jpeg', 'png', 'pdf', 'txt', 'docx'];
    $extension = $request->file('certificate_file')->getClientOriginalExtension();
    $name = time() . '_' . $request->file('certificate_file')->getClientOriginalName();

    if (!in_array($extension, $allowed_extensions)) {
    return $this->returnData(false, "Allowed Extensions Is: " . implode(', ', $allowed_extensions), 400);
    }

    $certificateFile = $request->file('certificate_file')->storeAs('certificates', $name);

    $oldCertificate = $certificate->certificate_file;

    if($oldCertificate !== null && Storage::disk('certificates')->exists($oldCertificate)){
    Storage::disk('certificates')->delete($oldCertificate);
    }

  }

  $certificateName = json_encode([
    'ar' => $request->certificate_name_ar,
    'en' => $request->certificate_name_en,
  ]);

  $certificateDescription = json_encode([
    'ar' => $request->certificate_description_ar ?? null,
    'en' => $request->certificate_description_en ?? null,
  ]);

  $certificateStatus = $certificate->update([
    'certificate_name' => $certificateName,
    'certificate_description' => $certificateDescription,
    'certificate_url' => $request->certificate_url ?? null,
    'certificate_file' => $name ?? null
  ]);

  return $this->returnData(true, $certificateStatus, 200);
}

وإعدادات postman كالتالي: 

قمت بتمرير الباراميترز المطلوبة عادي جدا وفي جزء الBody قمت بجعلها form-data وإخترت المفتاح بإسم certificate_file وجعلته من نوع file وقمت بإختيار الملف وأرسلت الrequest

فأجد أنه لم يدخل أبداً في هذا الجزء

if ($request->hasFile('certificate_file')) {
            
  $allowed_extensions = ['jpg', 'jpeg', 'png', 'pdf', 'txt', 'docx'];
  $extension = $request->file('certificate_file')->getClientOriginalExtension();
  $name = time() . '_' . $request->file('certificate_file')->getClientOriginalName();

  if (!in_array($extension, $allowed_extensions)) {
  	return $this->returnData(false, "Allowed Extensions Is: " . implode(', ', $allowed_extensions), 400);
  }

  $certificateFile = $request->file('certificate_file')->storeAs('certificates', $name);

  $oldCertificate = $certificate->certificate_file;

  if($oldCertificate !== null && Storage::disk('certificates')->exists($oldCertificate)){
  	Storage::disk('certificates')->delete($oldCertificate);
  }

}

وقمت بالتجربة عن طريق 

return $request;

فأجد أيضاً ان جميع الباراميترز التي تم تمريرها موجودة عدا الcertificate_file

فهل من حل؟ 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

أثناء استخدام Postman خاصةً عند اختبار تحميل الملف يرجى التأكد من :

في Header ال Content-type يجب ان يكون multipart/form-data
في Body حدد form-data و تأكد من اختيار file مكان text 

وال method لاباس تكون put

kFxyI.thumb.jpg.e63fa9c92d51266838957074310c8400.jpg

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن