اذهب إلى المحتوى
  • 0

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

محمود موسى2

السؤال

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

أستخدم 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

فهل من حل؟ 

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

Recommended Posts

  • 0

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

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

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

kFxyI.thumb.jpg.e63fa9c92d51266838957074310c8400.jpg

 

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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...