it-swarm.asia

تحميل ملف نموذج واجهة برمجة التطبيقات

لدي الكود التالي في النموذج الخاص بي.

$form['new']['upload'] = array(
  '#type' => 'file',
  '#title' => t(''),
  '#size' => 40,
);

في معالج التقديم ، يقوم بإرجاع اسم الملف ولكنه لا يحفظ الملف ويعيد كائن ملف. ماذا علي أن أفعل؟

ما أحاول القيام به هو إنشاء كتلة حيث يمكنك تحميل ملف تم حفظه في حقل ملف العقدة.

9
Lucy

نلقي نظرة على file_save_upload () والوظائف التي يطلق عليها.

ستتعامل الوظيفة مع التحقق من صحة الملف ، وحفظه في موقع جديد. في Drupal 7 هذا يضيف أيضًا الملف إلى الجدول file_managed.
لاحظ أنه سيتم تخزين الملف كملف مؤقت ، لذا تأكد من تعيين حالة الملف على الوضع الدائم بعد ذلك.

قد ترغب في تنفيذ وظيفة file_save_upload داخل ربط التحقق من صحة النموذج الخاص بك (قبل معالج الإرسال) ، بحيث يمكنك تنبيه المستخدم إذا فشل تحميل الملف ، أو لم يستوف متطلبات التحقق الخاصة بك.

إذا كان اسم حقل الصورة الذي تحاول التحقق من صحته هو image ، فيجب أن تكون المعلمة الأولى لملف file_save_upload صورة ، على هذا النحو:

$ path = file_save_upload ('image'، ...)؛

ستقوم هذه الوظيفة بعد ذلك بإرجاع المسار على الخادم الذي تم تحميل الصورة إليه (بحيث يمكنك على سبيل المثال تخزين هذا المسار في حقل قاعدة بيانات مخصص).

8
zroger

أنت تفتقد هذا في تعريف النموذج الخاص بك:

   $form['#attributes']['enctype'] = 'multipart/form-data'; // If this is not here, upload will fail on submit

إليك المنطق الذي أستخدمه لإنشاء أداة تحميل ملف في نموذج:

   // these give us the file upload widget: 
   $form['#attributes']['enctype'] = 'multipart/form-data'; // If this is not here, upload will fail on submit
   $form['fid'] = array( '#title'        => t('Upload image'),
                         '#type'         => 'file',
                         '#description'  => t('Images must be one of jpg, bmp, gif or png formats.'),
                       ); 

وإليك النظير لهذا المنطق ، الذي لدي في رد الاتصال على صحة النموذج الخاص بي ، لأن لدي قيود على اسم ملف الصورة في المنطق الخاص بي ، ولكن يمكنك وضع هذا في رد الاتصال المرسل إذا كنت تريد:

   // @see: http://api.drupal.org/api/function/file_save_upload/6
   // $file will become 0 if the upload doesn't exist, or an object describing the uploaded file
   $file = file_save_upload( 'fid' );
   error_log( 'file is "'.print_r( $file, true ).'"' );
   if (!$file) {
      form_set_error('fid', t('Unable to access file or file is missing.'));
   }

هذا هو.

4
Blake Senftner

لدي وظيفة تحقق عامة أستخدمها بشكل أساسي في الموضوعات التي تحتاج إلى دعم تحميل الصور. قد تكون قادرًا على استخدامه كما هو ، أو مع تغييرات طفيفة ، ولكن هذا سيصل بك بعيدًا.

/**
 * Validate/submit handler used for handling image uploads
 */
function module_upload_image_validate($form, &$form_state) {
  // This is not needed, I use this to use the same validate function
  // for several fields.
  $key = $form['#key'];
  $file = file_save_upload($key, array(
    'file_validate_is_image' => array(),
    'file_validate_extensions' => array('png gif jpg jpeg'),
  ));
  if ($file) {
    // Get the image info to get the correct extension for the uploaded file.
    $info = image_get_info($file->filepath);
    if (file_move($file, 'destination/filename'. $info['extension'], FILE_EXISTS_REPLACE)) {
      // Mark the file for permanent storage.
      file_set_status($file, FILE_STATUS_PERMANENT);
      // Update the files table.
      drupal_write_record('files', $file, 'fid');
      $form_state['values'][$key] = $file->filepath;
    }
    else {
      form_set_error($key, t('Failed to write the uploaded file to the site’s files folder.'));
    }
  }
}

باستخدام هذه الوظيفة ، ستحصل على مسار الملف كقيمة في معالج إرسال النموذج. قد تحتاج إلى معرف الملف بدلاً من ذلك ، اعتمادًا على استخدامك.

3
googletorp