tp6 接收并保存二进制文件

发布时间 2023-11-02 13:29:25作者: 现世中的素人
  public function upload()
    {
        $data = file_get_contents("php://input");
        //获取文件后缀
        $fileType = '';
        $this->getFileType($data, $fileType);
        if ($fileType == 'unknown'){
            exit('文件类型识别失败');
        }

        //拼接文件后缀:生成唯一文件名
        $uniqueName = uniqid('app_', true) . $fileType;

        $saveDb = $this->uploadBinaryFile($data, $uniqueName);
        var_dump('$params');
        var_dump($saveDb);
//        # 上传文件 【后续我是上传阿里,上传到哪自便】
//        $instance = ALi::setConf($params['type']);
//        $instance->getBuilder();
//        $result = $instance->uploadOss($fileName, $filePath);
//
//        if (isset($result['info']['http_code']) && $result['info']['http_code'] == 200) {
//            return success(Status::SUCCESS, '操作成功', [
//                "link" => $result['info']['url']
//            ]);
//        } else {
//            return error(Status::ERROR, '传输异常 请重试!', null);
//        }
    }

 public function uploadBinaryFile($data, $uniqueName)
    {
        $relativePath  = BASE_PATH . '/runtime/master/exp/';

        $savePath = $relativePath . $uniqueName;  //存放到数据表的路径
        $saveDb = $relativePath . $uniqueName;  //存放到数据表的路径
        if (!is_dir($relativePath)) {    //文件夹不存在,则创建;并给最大权限 777
            mkdir($relativePath,0777,true);
            chmod($relativePath,0777);
        }

        file_put_contents($savePath, $data);    //保存文件

        return $saveDb;
    }


    function getFileType($file, &$fileType)
    {
        /* 参考:PHP通过二进制流判断文件类型 https://blog.csdn.net/xwlljn/article/details/85134958 */
        // 文件头标识 (2 bytes)
        $bin = substr($file,0, 2);
        $strInfo = unpack("C2chars", $bin);
        $typeCode = intval($strInfo['chars1'] . $strInfo['chars2']);

        /* 参考:利用文件头判断文件类型 https://blog.csdn.net/weixin_34267123/article/details/85506211 */
        // 文件头对应的文件后缀关联数组
        $fileToSuffix = [
            255216 => '.jpg',
            7173 => '.gif',
            6677 => '.bmp',
            13780 => '.png',
            208207 => '.xls',   //注意:doc 文件会识别成 208207
            8075 => '.zip',     //注意:xlsx文件会识别成 8075
            239187 => '.js',
            6787 => '.swf',
            7067 => '.txt',
            7368 => '.mp3',
            4838 => '.wma',
            7784 => '.mid',
            8297 => '.rar',
            6063 => '.xml',
        ];

        $fileType = empty($fileToSuffix[$typeCode]) ? 'unknown' : $fileToSuffix[$typeCode];
    }

  结果: 

** 借鉴以为网友的