2010-11-20 9 views
3

私はDrupal 7とファイルのアップロードに問題があります。動作しませんフォームでDrupal 7にファイルをアップロードするには?

マイコード:

function test_form($form, &$form_state){ 

$form['#attributes'] = array('enctype' => "multipart/form-data"); 
$form['podcast'] = array(
    '#title' => 'Audio file', 
    '#type' => 'file', 
); 
$form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Save'), 
); 
return $form; 

} 

function test_form_submit($form, &$form_state){ 

$vals = $form_state['values']; 
$filepath = 'public://test/'; 
//$filepath = 'temporary://test/'; 
$filename = 'rcc_date.mp3'; 

file_prepare_directory($filepath, FILE_CREATE_DIRECTORY); 
$file = file_save_upload('podcast', array('file_validate_extensions' => array()), $filepath.$filename); 
//got FALSE here. Why? 
die(print_r($file===FALSE).'-'); 

} 

だから、パス作成されますが、ファイルはありませんアップロードを行い、file_save_uploadはFALSEを返します。また、arrayValue()とtrueを$バリデータとして試してみました。

大変助かりました。ありがとう。

+0

ファイル名を動的に取得するにはどうすればよいですか? – Hitesh

+0

このコードでは、ファイル名は完全に不要です。それを完全に残しなさい。 $ filename変数を設定せず、$ filepathに追加しないでください。 – Magmatic

+0

array( 'file_validate_extensions' => array())のように、ファイルバリデータの空の配列を使用するには、安全ではないので使用しないでください。代わりにNULLを使用して、デフォルトを使用するか、実際のリストを自分で作成します。 – Magmatic

答えて

4

Doh。 $ destinationはファイル名を含んではいけません。

+0

$ destinationがどこにあるのか疑問に思われる方は、file_save_uploadの3番目の引数です。その行は次のようになります:$ file = file_save_upload( 'podcast'、array( 'file_validate_extensions' => array())、$ filepath);または、次のようにするのが望ましいです:$ file = file_save_upload( 'podcast'、null、$ filepath);これははるかに安全です。たとえば、PHPファイルをアップロードすることは許可されていません。これはセキュリティ上の大きなリスクになります。 https://api.drupal.org/api/drupal/includes!file.inc/function/file_save_upload/7を参照してください。 – Magmatic

関連する問題