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}