01/**
02 * 表单提交,在提交中处理上传文件
03 * @param (array) &$form
04 * @param (array) &$form_state
05 */
06function myfile_page_form_submit(&$form, &$form_state) {
07  /**
08   * 设置验证函数,索引为函数名称,值则为传递给函数的参数
09   * 系统默认有一些常用验证函数,你也可以自定义
10   */
11  $validators = array();
12   
13  /**
14   * 验证文件大小,以及分配给用户的总空间大小,以 bytes 为单位
15   * 等同于调用函数:file_validate_size()
16   *
17   * 用户总空间以及允许上传的最大文件,在管理 - 文件系统中可以设置
18   * 此处直接调用该全局配置,你也可以自定义,如:
19   *  $validators['file_validate_size'] = array(2048000, 10000000);
20   */
21   
22  // 允许上传的最大文件
23  $file_limit = variable_get('upload_uploadsize_default', 1);
24  // 用户总空间大小
25  $user_limit = variable_get('upload_usersize_default', 1);
26   
27  // 文件大小相关验证
28  $validators['file_validate_size'] = array($file_limit, $user_limit);
29   
30  /**
31   * 验证文件类型,以半角空格分隔多个后缀
32   * 可以通过 variable_get('upload_extensions_default') 获取全局设置
33   */
34  $validators['file_validate_extensions'] = array('zip txt doc rar');
35   
36  // 如果是图片可以限制最大尺寸
37  // $validators['file_validate_image_resolution'] = array('100x100');
38   
39  /**
40   * 接下来,自定义一个验证函数
41   */
42  $validators['myfile_ext_validate'] = array('test');
43   
44  /**
45   * 创建文件保存位置,该位置系统必须可读写,若不定义,则会使用默认文件目录
46   * file_directory_path() 用来获取默认文件存储目录,一般我们都将文件保存在该目录之下
47   */
48   
49  $dir = file_directory_path().'/test';
50   
51  /**
52   * 检查路径是否存在,若不存在,则尝试创建
53   * 注意:该函数不能递归创建,比如 /a/b/c,三层目录都不存在,无法同时创建
54   * drupal 7将支持递归创建,实际上也是 php5 mkdir 提供的支持
55   */
56  file_check_directory($dir, FILE_CREATE_DIRECTORY);
57   
58  /**
59   * 保存文件,调用 file_save_upload(),将会自动写入 files 表
60   *
61   * @param1:即为表单字段名称,必须对应上面表单中的定义
62   * @param2:验证相关设置
63   * @param3:文件保存路径
64   *
65   * @return:如果上传成功,将返回一个文件对象,包含 files 中所有字段
66   */
67  if ($file = file_save_upload('file', $validators, $dir)) {
68     
69    // 上传成功了,把文件状态改为正常,默认为 0,可能会被清除
70    file_set_status($file, 1);
71     
72    //在这儿,我们可以做一些扩展,比如让文件和节点关联起来,等等。
73     
74    drupal_set_message($file->fid .'-'. $file->filepath);
75     
76  } else {
77    // 一般来说,上传失败,系统会显示失败的原因
78     
79    drupal_set_message('上传失败了');
80  }
81}