首页 > 其他分享 >tp6 接收并保存二进制文件

tp6 接收并保存二进制文件

时间:2023-11-02 13:35:20浏览次数:35  
标签:文件 return 二进制 relativePath fileType tp6 result 接收 data

    /**
     * @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];
    }

 

 

结果:

 

** 以上借鉴网友的代码

标签:文件,return,二进制,relativePath,fileType,tp6,result,接收,data
From: https://www.cnblogs.com/G921123/p/17805190.html

相关文章

  • 使用​​Flask​​库来创建一个Webhook服务器,该服务器可以接收HTTP请求
    在Python中,你可以使用Flask库来创建一个Webhook服务器,该服务器可以接收HTTP请求,处理请求体,并发送响应。以下是一个简单的示例:fromflaskimportFlask,request,jsonifyapp=Flask(__name__)@app.route('/webhook',methods=['POST'])defwebhook():#获取请求体中的数......
  • tp6 redirect用法
    一.响应操作1.响应输出,有好几种:包括return、json()和view()等等;2.默认输出方式是以html格式输出,如果你发起json请求,则输出json;3.而背后是response对象,可以用response()输出达到相同的效果;returnresponse($data);4.使用response()方法可以设置第二参数,状态码,或调......
  • HDFS写流程分析:Namenode接收client请求
    1.背景在https://blog.51cto.com/u_15327484/8023493文章中,介绍了HDFS创建文件时,客户端执行的操作。对于NameNode而言,在创建文件的过程中,它会接受客户端以下rpc请求:createaddBlockcomplete本文将详细介绍这三个RPC在NameNode端的处理流程,同时扩展介绍Namenode相关架构。2.......
  • 如何配置LiveNVR接收RTMP推流,实现直播加录像回放的功能
    1、需求介绍目前很多移动终端设备(如无人机等)只支持RTMP推流输出,不支持GB28181协议。但是又有需要通过GB28181协议接入到视频平台的需求。比如有些大疆无人机产品不能直接注册国标平台,只能rtmp推流。那么,项目中如果将无人机的rtmp的推流转成GB/T281812、获取RTMP推流地址2.1、RT......
  • web前端(Vue2.x)接收H264实时视频码流(二进制)进行播放
    1、安装 [email protected]、.vue文件中使用<template><div><videoid="dom_id"muted="muted"controlsclass="video_box"></video><divv-if="!has_data"v-loading="!......
  • 如何使用SHC对Shell脚本进行二进制编译和封装
    在许多情况下,我们需要保护我们的shell脚本源码不被别人轻易查看。这时,使用shc工具将shell脚本编译成二进制文件是一个有效的方法。本文将详细介绍如何在线和离线条件下安装shc,并将其用于编译你的脚本。什么是SHC?shc是一个由C语言编写的Shell脚本加密程序,它可以将你的脚本编译成......
  • CD4028B是BCD到十进制或二进制到八进制解码器
    概述■CD4028B是BCD到十进制或二进制到八进制解码器,由4个输入、解码逻辑门和10个输出缓冲器组成。应用于4个输入(A、B、C和D)的BCD码在选定的10进制1解码输出处产生高电平。类似地,应用于输入a、B和C的3位二进制代码在输出0–7处以八进制解码。D输入处的高电平信号禁止八进制解码,并导......
  • axios中post请求后台req.body接收不到参数的解释
    axios的get请求都是把参数放在params属性下,在post请求下有两种方法,一种是放在params属性中,适合传参较少且数据较简单的情况,另外一种是放在data属性中,如果传参中含有引号、等号、拼接的json串或传参的数据量较大时候使用;后台的服务器的配置,node后台一般会配置中间件解析数据,包含......
  • 探索计算机内部的神秘语言:二进制的魅力
    引言在之前的章节中,我们已经详细介绍了计算机硬件的组成部分,包括中央处理器(CPU)、内存、磁盘和总线等。因此,从今天开始,我们将深入探讨计算机内部的工作原理。首先,我们将从二进制这个简单而重要的概念开始讲解,因为计算机底层只能使用二进制来表示和处理信息。二进制我们都知道,计......
  • 微信公众号-XML数据接收与处理
    第一步:接收微信发来的xml数据有以下两种方式$xml=$GLOBALS['HTTP_RAM_POST_DATA'];//php7版本以上不能使用$xml=file_get_contents('php://input');第二步:对接收过来的数据进行处理libxml_disable_entity_loader(true);$obj=simplexml_load_string($postStr,'Simp......