关键点有两个:1.在页面上显示出上传的控件,2.代码实现文件上传到服务器的功能

一、显示控件:

先来看关键点1: 实现页面显示出上传控件, 关键代码:

 $form['my_file_field'] = array(
        '#type' => 'managed_file',
        '#title' => '文件', 
        )
    );   

做过上传的功能的人,会发现上面的代码值能实现在页面显示上传控件,但是没有限制上传大小。另外需要注意的是,上传的路径和格式也必须在定义该控件的时候指定。完整的上传控件的代码实现:

define("UPLOAD_Base_Path", "public://myfilezjf");
$str_upload_extend='doc docx xls xlsx ppt pptx ';//这里写允许的上传格式
    $SIZE_M=8;//限制大小,单位M
    $form['my_file_field'] = array(
        '#type' => 'managed_file',
        '#title' => '文件',
        '#description' => '格式限制:'.$str_upload_extend.' 大小限制:'.$SIZE_M.'M以内',
        '#upload_location' => UPLOAD_Base_Path,
        '#upload_validators' => array(
            'file_validate_extensions' => array($str_upload_extend),//限制上传文件后缀
            // Pass the maximum file size in bytes
            'file_validate_size' => array($SIZE_M*1024*1024),//限制大小
        )
    );   

二、上传代码具体实现关键点:2:实现上传的具体代码:

1 function uploadview_form_submit($form, &$form_state){   
2 //     Load the file via file.fid.  
3     $file = file_load($form_state['values']['my_file_field']);
4     $file->status = FILE_STATUS_PERMANENT;
5     file_save($file);
6 
7     drupal_set_message('保存成功'); 
9 }

需要特别说明一下的是,第4行代码,就是为文件制定了satus=1,即永久保存的文件,不会被drupal自动删除;否则是status=0,指的是临时文件,会被drupal定期自动删除

三、完全意义上的实现

到前面两步,我们已经实现了上传的功能,但是怎么查看上传的文件列表,从而进行下载和管理呢?就是你怎么从数据库中查出你做额这个页面的上传的文件呢?

这里我们需要了解,凡是上传的文件都会在file_manage表中保存一条记录,上面说到的status就是该表的属性之一,下面就是一条该表的记录:

drupal7 开发自定义上传、下载模块的上传功能

但是其他模块上传的文件也会在这张表中留下痕迹,怎么区分呢?目前我能给出的方案就是,单独再建立一张表,两张表进行关联,表结构为:fid int(10) PK, title varchar(255)

完整代码如下:

3.1 upload.module文件:

<?php 

function upload_menu()
{
    $items=array();
    
    //管理列表
    $items['admin/upload']=array(
        'title' => '上传', 
        'description' => '上传',
        'page callback' => 'manage_upload_list', 
        'access arguments' => array('access content' ), 
        'type' => MENU_NORMAL_ITEM,
        'file' => 'upload.admin.inc',
    );
       
    //进行上传
    $items['upload']=array(
        'title' => '上传--测试',
        'description' => '上传',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('uploadview_form'),
        'access arguments' => array('to upload' ),
        'type' => MENU_NORMAL_ITEM,
        'file' => 'upload.pages.inc',
    
    );
    
    //下载列表
    $items['upload/list']=array(
        'title'=>'下载列表',
        'description' => '下载列表',
        'page callback' => 'download_list', 
        'access arguments' => array('to upload' ),
        'type' => MENU_NORMAL_ITEM,
        'file' => 'upload.pages.inc',
    );
    
    //删除
    $items['admin/upload/%/delete']=array(
        'title'=>'删除',
        'description'=>'删除',
        'page callback'=>'drupal_get_form', 
        'page arguments'=>array('upload_delete_confirm',2),
        'access arguments' => array('manage upload' ),
        'type' => MENU_NORMAL_ITEM,
        'file' => 'upload.admin.inc',
        
    );
    
    return $items;
}

function upload_permission(){
    return array(
        'manage upload'=>array(
            'title'=>t('管理下载权限')
        ),
        'to upload'=>array(
            'title'=>t('进行上传')
        ),
        
    );
}
 
function upload_block_info()
{
    $blocks['upload_download']=array(
        'info'=>t('下载区域'),
        'weight'=>1,
        'status'=>1,
        'region'=>'Sidebar first'
    );
 return $blocks;   
}

function upload_block_view($delta='')
{
    $block=array();
    
    switch ($delta)
    {
        case 'upload_download':
            $block['subject']='下载';
            $block['content']=get_mydownload_block();
            break;
    }
 return $block;
}


function get_mydownload_block()
{
    
    $str_query="SELECT c_f_u.fid AS fid, c_f_u.title AS title, f_m.uri AS uri, f_m.filename AS filename
                FROM 
                custom_file_upload c_f_u
                INNER JOIN file_managed f_m ON c_f_u.fid=f_m.fid
                ORDER BY f_m.timestamp DESC
                LIMIT 10 OFFSET 0 ";
               
    $content = db_query($str_query);

    $lists=array();


    $output='<div class="item-list">';
    $_count=1;
    if ($content) {
        $output.='<ul>';
        $length=count($content);
        foreach ($content as $data)
        {
            $class='';
            if($_count==1) {//第一个
                $class='class="first"';
            }
            elseif ($_count==$length)//最后一个
            {
                $class='class="last"';
            }

            $url_head='http://'.$_SERVER['HTTP_HOST'].'/drupal755/sites/default/files/';
            $url=$url_head.ltrim($data->uri,'public://');
            $html_h=l($data->title,$url); 
            $output.='<li '.$class.'>'.$html_h.'</li>';
            $_count++;
        }
        $output.='</ul>';
    }
    else 
    {
        $output.='<p>No Content</p>';
    }
    $output.='</div>';

    if ($_count>=5) {
        $url='http://'.$_SERVER['HTTP_HOST'].'/drupal755/upload/list';
        $output.='<div style="text-align:right;width:100%">'.l('更多>>',$url).'</div>';
    }
     
    return  $output;
}

function upload_theme(){
    return array(
        'hoyand_paiko_thumb_upload' => array(
            'render element' => 'element',
        ),
    );
}

 
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-22
  • 2021-09-29
  • 2022-12-23
  • 2022-12-23
  • 2023-01-10
  • 2021-12-22
猜你喜欢
  • 2021-07-17
  • 2021-10-07
  • 2022-01-20
  • 2021-08-10
  • 2021-07-23
相关资源
相似解决方案