ফর্ম এপি ফাইল আপলোড করুন


9

আমার ফর্মটিতে নিম্নলিখিত কোড রয়েছে।

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

জমা হ্যান্ডলারে, এটি ফাইলের নাম ফেরত দেয় তবে এটি ফাইলটি সংরক্ষণ করে এবং কোনও ফাইলের বস্তু ফেরায় না। আমার আর কী করা দরকার?

আমি যা করার চেষ্টা করছি তা হল একটি ব্লক তৈরি করা যেখানে আপনি কোনও ফাইল আপলোড করতে পারেন যা এটি নোডের ফাইল ক্ষেত্রে সংরক্ষণ করা হয়েছে।

উত্তর:


8

কটাক্ষপাত () file_save_upload এবং ফাংশন যা কল।

ফাংশনটি ফাইলটির বৈধতা পরিচালনা করবে এবং এটি একটি নতুন অবস্থানে সংরক্ষণ করবে। ড্রুপাল 7-এ এটি ফাইল_সামগ্রী সারণিতে ফাইল যুক্ত করে।
নোট করুন যে ফাইলটি একটি অস্থায়ী ফাইল হিসাবে সংরক্ষণ করা হবে, সুতরাং স্থিতির পরে স্থিতিতে ফাইলের স্থিতি নির্ধারণ করতে ভুলবেন না।

আপনি সম্ভবত আপনার ফর্মটির বৈধতা হুকের ভিতরে ফাইল_সেভ_আপলোড ফাংশনটি প্রয়োগ করতে চান (হ্যান্ডলারের জমা দেওয়ার আগে), যাতে ফাইল আপলোড ব্যর্থ হয় বা আপনার বৈধতার প্রয়োজনীয়তা পূরণ না করে আপনি ব্যবহারকারীকে সতর্ক করতে পারেন।

আপনি যা যা ইমেজ ফিল্ডটি যাচাই করতে চেষ্টা করছেন তার নাম যদি imageফাইল_সেভ_আপলোডের প্রথম প্যারামিটারের চিত্র হয় তবে যেমন:

$ পথ = ফাইল_সেভ_আপলোড ('চিত্র', ...);

এই ফাংশনটি তারপরে সার্ভারের সেই পথে ফিরে আসবে যেখানে ছবিটি আপলোড করা হয়েছিল (যাতে আপনি উদাহরণ হিসাবে কোনও কাস্টম ডেটাবেস ক্ষেত্রে সংরক্ষণ করতে পারেন)।


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']ড্রুপাল in এ আপনার আসলে দরকার নেই । এটি স্বয়ংক্রিয়ভাবে যত্ন নেওয়া হয়েছে
user724228

3
আপনার multipart/form-dataড্রুপাল for এর জন্য দরকার নেই , কোনও ফাইল ক্ষেত্র ব্যবহার করার সময় এটি ড্রুপাল in এ নির্মিত হয়।
ফ্লাই করুন

@ বসফটনার আমি আপনার মতো একই পদ্ধতি ব্যবহার করছি, তবে আমি যখন এটি চেষ্টা করে দেখি তখন তার $file === nullঅর্থটি পাওয়া যায় no file was uploaded(স্পেস অনুসারে: api.drupal.org/api/drupal/includes!file.inc/function /… ) সেক্ষেত্রে আমার কী করা উচিত? আমি কীভাবে এই জাতীয় জিনিসটি ডিবাগ করতে পারি?
শনি

@ শাহন: আপনি দ্রুপাল in এ কাজ করছেন? এই যুক্তিটি ড্রুপাল for এর জন্য পরীক্ষা করা হয়েছে আমার এখনও ডি 7 এ চেষ্টা করার সুযোগ হয়নি, সুতরাং, আপনি যদি ডি 7 তে থাকেন তবে "আমি জানি না"। আপনি যদি ডি 6 এ থাকেন তবে এটি কাজ করা উচিত - আপনি কি নিশ্চিত যে 'ফিড' আপনার ফাইল আপলোড উইজেটের ক্ষেত্রের নাম?
ব্লেক সেনফটনার

হ্যাঁ উভয় প্রশ্নের হ্যাঁ: আমি নিশ্চিত যে আমি উইজেটের সঠিক নাম পেয়েছি এবং আমি ডি 7 ব্যবহার করছি। আমি মনে করি এটি আমার একটি নতুন প্রশ্ন করা উচিত ...
শন

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

এই ফাংশনটি ব্যবহার করে, আপনি ফর্ম জমা হ্যান্ডলার হিসাবে মূল্য হিসাবে ফাইলপথ পাবেন। পরিবর্তে আপনার ব্যবহারের উপর নির্ভর করে আপনি ফাইল আইডি চাইবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.