फॉर्म Api फ़ाइल अपलोड करें


9

मेरे रूप में निम्न कोड है।

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

सबमिशन हैंडलर पर, यह फाइल का नाम देता है लेकिन यह फाइल को सेव नहीं करता है और फाइल ऑब्जेक्ट को वापस करता है। मुझे और क्या करने की जरूरत है?

मैं जो करने की कोशिश कर रहा हूं वह एक ब्लॉक बना रहा है जहां आप एक फ़ाइल अपलोड कर सकते हैं जो इसे नोड के फ़ाइल फ़ील्ड में सहेजा गया है।

जवाबों:


8

File_save_upload () और इसे कॉल करने वाले फ़ंक्शंस पर एक नज़र डालें ।

फ़ंक्शन फ़ाइल के सत्यापन को संभाल लेगा, और इसे नए स्थान पर सहेज देगा। Drupal 7 में यह फ़ाइल को file_managed तालिका में भी जोड़ता है।
ध्यान दें कि फ़ाइल एक अस्थायी फ़ाइल के रूप में संग्रहीत की जाएगी, इसलिए फ़ाइल की स्थिति को स्थायी रूप से सेट करना सुनिश्चित करें।

आप संभवतः अपने फ़ॉर्म के सत्यापन हुक (सबमिट हैंडलर से पहले) के अंदर file_save_upload फ़ंक्शन को लागू करना चाहते हैं, ताकि फ़ाइल अपलोड विफल होने पर, या अपनी सत्यापन आवश्यकताओं को पूरा न करने पर आप उपयोगकर्ता को सचेत कर सकें।

यदि आप जिस छवि क्षेत्र को मान्य करने का प्रयास कर रहे हैं उसका नाम है image, तो file_save_upload का पहला पैरामीटर चित्र होना चाहिए, जैसे:

$ पथ = file_save_upload ('छवि', ...);

यह फ़ंक्शन तब उस सर्वर पर पथ लौटाएगा जिस पर छवि अपलोड की गई थी (इसलिए आप उदाहरण के लिए उस पथ को कस्टम डेटाबेस फ़ील्ड में संग्रहीत कर सकते हैं)।


4

आप इसे अपनी फ़ॉर्म परिभाषा में याद कर रहे हैं:

   $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.'));
   }

बस।


3
आप वास्तव $form['#attributes']['enctype']में Drupal में जरूरत नहीं है । यह स्वचालित रूप से ध्यान रखा जाता है
user724228

3
तुम multipart/form-datadrupal 7 के लिए की जरूरत नहीं है , यह एक फ़ाइल क्षेत्र का उपयोग करते समय drupal 7 में बनाया गया है।
FLY

@bsenftner मैं उसी विधि का उपयोग कर रहा हूं जैसा आप कर रहे हैं, लेकिन जब मैं इसे आज़माता हूं, तो मुझे वह मिल जाता है $file === null, जिसका अर्थ है कि no file was uploaded(चश्मे के अनुसार: api.drupal.org/api/drupal/includes -file.in.function)! /… ) उस मामले में मुझे क्या करना चाहिए? मैं इस तरह की बात कैसे कर सकता हूं?
शॉन

@ शॉन: क्या आप ड्रुपल 7 में काम कर रहे हैं? इस तर्क का Drupal 6 के लिए परीक्षण किया गया है। मुझे अभी तक D7 पर इसे आज़माने का मौका नहीं मिला है, इसलिए यदि आप D7 में हैं तो "मुझे नहीं पता"। यदि आप D6 में हैं, तो यह काम करना चाहिए - क्या आप सुनिश्चित हैं कि 'fid' आपकी फ़ाइल अपलोड विजेट का फ़ील्ड नाम है?
ब्लेक सेफ्टनर

दोनों प्रश्नों के लिए हाँ: मुझे यकीन है कि मुझे विजेट का सही नाम मिल गया है और मैं D7 का उपयोग कर रहा हूं। मुझे लगता है कि मुझे यह एक नया सवाल करना चाहिए ...
शॉन

3

मेरे पास एक सामान्य सत्यापन फ़ंक्शन है जो मैं मुख्य रूप से उन विषयों में उपयोग करता हूं जिन्हें छवियों के अपलोड का समर्थन करने की आवश्यकता है। आप इसे इसका उपयोग करने में सक्षम हो सकते हैं, या मामूली बदलावों के साथ, लेकिन यह आपको बहुत दूर होना चाहिए।

/**
 * 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.'));
    }
  }
}

इस फ़ंक्शन का उपयोग करते हुए, आपको फ़ाइलपाठ को फॉर्म सबमिट हैंडलर में मूल्य के रूप में मिलेगा। आप अपने उपयोग के आधार पर फ़ाइल आईडी चाहते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.