【问题标题】:Drupal 7 - Upload Image ProgrammaticallyDrupal 7 - 以编程方式上传图像
【发布时间】:2012-01-04 16:32:22
【问题描述】:

我想在自定义模块中上传图片。如果需要,必须永久保存图像并重命名。稍后我希望能够在表单上的某处或我想要的任何位置显示图像。

我当前的代码:

function my_module_name_new_form()
{
 ....

$form['icon'] = array
(
    '#type' => 'file',
    '#title' => t('Icon'),
    '#description' => t('Click "Chose File" to select an image to upload.')
);

 ....
}

在提交钩子中我有:

// Icon
$filename = $form_state['values']['icon'];
$dest = file_build_uri($filename); 
file_save_data('My data', $dest, FILE_EXISTS_RENAME); 

什么都没有发生...我也找不到任何与 Drupal 7.x 兼容的模块,它们以某种方式让这里的生活更轻松。

解决方案:

//----------------------------
// Icon
//----------------------------  
$dest_dir = file_default_scheme() . '://';// Note: file_directory_path() was removed in Drupal 7.x. // $dest_dir contains the destination directory for the file. 

$validators = array('file_validate_extensions' => array('jpg png gif'));

//Save file
if ($file = file_save_upload('icon', $validators, $dest_dir))
{
    $filename = $file->filename;        
    $file_content = file_get_contents($dest_dir.$filename); // Fatal error: Cannot access empty property in C:\xampp\htdocs\drupal\modules\custom\achievements\achievements.module on line 446
}
else
{
    form_set_error('icon', 'Could not upload file.');
}
// To display the image: // die('<IMG SRC="'.file_create_url($dest_dir.$filename).'"/>');
//----------------------------  

【问题讨论】:

    标签: image file drupal upload


    【解决方案1】:

    我最近不得不这样做。这就是我最终得到的。即不使用drupal表单将图像保存到图像字段。

    if(isset($_FILES['image'])){
    
        $node = node_load($nid);
    
        //Get the uploaded file from the temp directory.            
        $image = file_get_contents($_FILES['image']['tmp_name']);
    
        //Create the directory if it does not already exist, otherwise check the permissions
        $directory = 'public://my-image-folder';
        file_prepare_directory($directory, FILE_CREATE_DIRECTORY);
    
        //Saves a file to the specified destination and creates a database entry.
        $file = file_save_data($image, 'public://my-image-folder/'.$_FILES['image']['name'], FILE_EXISTS_RENAME);
    
        //Set the file status to permanent so it is not deleted in next cron run
        $file->status = FILE_STATUS_PERMANENT;
        file_save($file);
    
        //Now we have a saved file and an object for it, just need to add it to the node's image field.
        $node->field_my_image_field[$node->language][0] = (array)$file;
    
        node_save($node);
    }
    

    【讨论】:

      【解决方案2】:

      试试:

       $validators = array(
          'file_validate_extensions' => array('jpg png gif'),
        );
        //Save file
        if ($file = file_save_upload('icon', $validators, $your_file_destination)) {
          $file_content = file_get_contents($file->filepath);
        }
        else{
          form_set_error('icon', 'Could not upload file.');
        }
      

      【讨论】:

      • 我无法让它工作。请参阅我在第一篇文章中编辑的示例。我必须以某种方式从输入字段中获取文件,但那个文件似乎已经出错了。
      • 删除 file_save_data 调用和 $dest 应该是您的文件将被保存的目录(例如,file_directory_path() 这是您设置默认文件目录的位置,通常是 sites/default/files )
      • file_directory_path() 已在 D7 中删除,但我找到了替代品。编辑:它现在似乎工作了。
      • 不应该通过 FAPI 渲染数组中的回调函数进行验证吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多