tp6 接收并保存二进制文件

    /**
     * @return \think\response\Json
     */
    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 . '/upload/';
        $savePath = $relativePath . $uniqueName;  //存放到数据表的路径
        if (!is_dir($relativePath)) {    //文件夹不存在,则创建;并给最大权限 777
            mkdir($relativePath,0777,true);
            chmod($relativePath,0777);
        }
        file_put_contents($savePath, $data);    //保存文件
        return $savePath;
    }


    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];
    }

 

 

结果:

 

** 以上借鉴网友的代码

posted @ 2023-11-02 13:23  现世中的素人  阅读(125)  评论(0编辑  收藏  举报