2012-12-16 89 views
3

我正在尋找一種方法來重命名用戶通過文件區上傳的文件。例如,使用uniqid重命名用戶個人資料照片。Drupal 7:重命名上傳文件(通過文件區)

我在D6的「Drupal 6: How to Change Filename on Upload」找到了一個很好的解決方案,但是找不到D7的任何東西。

另一種選擇是使用File (Field) Paths,但:

  1. 模塊會在我的設置警告。
  2. 似乎是一個矯枉過正的安裝一個通用模塊的一個非常具體的目的。

回答

1

重要組成部分,是更換SOMEFILENAME的

function MYMODULE_background_form_validate($form, &$form_state) { 
    $file = file_save_upload('file', array(
     'file_validate_is_image' => array(), 
     'file_validate_extensions' => array('jpg'), 
)); 
    if ($file) { 
    if ($file = file_move($file, 'public://**SOMEFILENAME**', FILE_EXISTS_REPLACE)) { 
     $form_state['values']['file'] = $file; 
    } 
    else { 
     form_set_error('file', t('Failed to write the uploaded file the site\'s file folder.')); 
    } 
    } 
    else { 
    form_set_error('file', t('No file was uploaded.')); 
    } 
} 

function MYMODULE_background_form_submit(&$form, &$form_state) { 
    $file=$form_state['values']['file']; 
    unset($form_state['values']['file']); 
    $file->status = FILE_STATUS_PERMANENT; 
    file_save($file); 
    drupal_set_message(t('Thanks, the background has been saved.')); 
} 
3

您可以通過hook_file_presave爲您所期望的圖形 爲例

function yourmodulename_file_presave($file) { 
    $parts = pathinfo($file->filename); 
    $file->filename = 'mypattern_'.$file->uid .'_'. $file->timestamp . '.' . $parts['extension']; 
} 

改變每一個文件的上傳,但是這種方法不重命名filname(它只是在file_managed表中重命名文件名),如果你想als Ø重命名文件名(文件的URI),你應該使用下面的代碼

function hook_file_insert($file) { 
    $parts = pathinfo($file->filename); 
    $uri = 'public://'.'mypattern_'.$file->uid .'_'. $file->timestamp . '.' . $parts['extension']; 
    $file=file_move($file, $uri); 
} 
+0

的問題是,如果你想這取決於它的類型來重命名文件名(在磁盤上),讓我們說,只有「文件」,和你有2種使用* application/pdf *作爲MIME類型的類型,在上傳文件的那一刻,它已經有了一個內部類型,這是不可預測的(這似乎是一個錯誤)。但它可以防止重命名文件取決於他們的類型(這裏我想tor重命名*只*我的自定義文件類型*新聞*。似乎非常棘手 – nerdoc

+0

我提交了一個[bug for file_entity](https://www.drupal.org/節點/ 2603680)。 – nerdoc