QeePHP中上传多个文件的基础写法

 if (request_is_post()){

            $uploader = new Helper_Uploader();          
            $allFiles=$uploader->allFiles();
            if (count($allFiles)>0){
                foreach ($allFiles as $file){
                    /* @var  $file Helper_Uploader_File */
                    $file_name = $file->filename();
                    //文件的后缀名
                    $file_type = $file->extname();
                    //不包含后缀的文件名
                    $file_front = basename($file_name,'.'.$file_type);
                    $waybill = Waybill::find('waybill_code = ?',$file_front)->getOne();
                    if($waybill->waybill_id!=null){
                        $waybill_id = $waybill->waybill_id;
                    }else {                       
                    return $this->_redirectMessage("扫描文件".$file_front."上传失败! 
                    6秒中之后将自动跳回... ...",
                    "上传扫描件失败! 运单表中无对应文件名为 ".$file_front." 的主运单号!", 
                    url("scannedmanage/index") ,6);
                    }
                    //文件上传路径
                    $uploadtmp_dir = _INDEX_DIR_.'/public/upload/scanningcopy/';
                    Helper_Filesys::mkdirs($uploadtmp_dir);
                    $fullname = $uploadtmp_dir . $file_name;
                    $file->move($fullname);
                    //数据保存到数据库
                    $files = new File();
                    $files->waybill_id = $waybill_id;
                    $files->file_name = $file_name;
                    $files->file_path = $uploadtmp_dir;
                    $files->operator = "Alan";
                    $files->remark = request('remark');
                    $files->save();
                }
                return $this->_redirect(url("scannedmanage/index"));
            }else {
                return $this->_redirect(url("scannedmanage/index"));
            }
        }

客户端页面写法:

<form action="<?php echo url('scannedmanage/upload2');?>" method="post" enctype="multipart/form-data">
        <label>备注:</label>
        <input type="text" name="remark" id="remark" />
        <label>选择文件:</label>
        <div>
            <input type="text" name="filepath" id="filepath">
            <?php echo Q::control('upload', 'files[]', array('multiple'=>'multiple','accept'=>'image/*'))?>
        </div>
        <input type="submit" class="btn" name="submit" value="上传"
            onclick="return doFormCheck();" />
</form>

说明:注意QeePHP框架自带的upload组件中关于支持多文件上传和只接受图片的写法!还有一点就是组件的name要为数组类型的,如此处的files[ ]!

拖拽上传多个文件:

客户端页面直接将要上传限定的区域包含到一个id名为dropArea的div中即可!

脚本部分:

<script type="text/javascript">
/**
 * 拖动事件
 */
var dropHandler = function(e) {
    fileList = e.dataTransfer.files;
    for(var i=0;i<fileList.length;i++){
    if (fileList.length == 0) {
        return;
    }
    
    if (fileList[i].type.indexOf('image') === -1) {
        alert("请上传图片格式文件");
        return;
    }
    var xhr = new XMLHttpRequest();
    var upload = xhr.upload;
    upload.addEventListener("load", uploadSucceed, false);
    xhr.open("post",'<?php echo url('scannedmanage/upload1')?>&file_name=' + fileList[i].name, true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; boundary=' + new Date().getTime());
    xhr.send(fileList[i]);
    }
};

/**
 * 拖动后刷新页面
 */
function uploadSucceed(event) {
    window.location.reload();
}
</script>

注意部分:下述一行Ajax请求代码,我原以为在QeePHP框架中通过控制器、动作这种构成路径的形式是传不到数据到指定的控制器方法中的,以为得采用绝对路径的方式来指定到具体路径下的页面,但是实际的情况是,这种写法同样能传递数据到目标文件!

xhr.open("post",'<?php echo url('scannedmanage/upload1')?>&file_name=' + fileList[i].name, true);


你可能感兴趣的:(php框架,初学,qeephp)