目录

  • 一、参考
  • 二、实现
  • 三、请求效果图
  • 四、实现代码

一、参考

利用文件头判断文件类型 去看看
PHP通过二进制流判断文件类型 去看看

二、实现

1、通过postman工具发送请求
请求方式:get,post,put,patch,delete,options…这些都可以(注意get有传输大小限制)
2、框架TP
就这一句用到了TP的方法,改成你框架的(对应方法/常量)即可

$thinkPath = Env::get('root_path');    //框架应用根目录,命名空间为:use think\facade\Env;

3、注意
上传的文件如果太大,得加大php.ini的内存。

三、请求效果图

四、实现代码

<?phpnamespace app\index\controller;use think\facade\Env;class Ablog extends Base
{public function test5(){//接收二进制文件流数据$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);exit("文件存放路径为 [ {$saveDb} ]");}/*** ****** 这个方法自己测试一下,我不能保证是对的,因为我也是百度的 >_< ******* 根据二进制流获取文件类型* @param $file 文件数据* @param $fileType 文件后缀*/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 文件会识别成 2082078075 => '.zip',     //注意:xlsx文件会识别成 8075239187 => '.js',6787 => '.swf',7067 => '.txt',7368 => '.mp3',4838 => '.wma',7784 => '.mid',8297 => '.rar',6063 => '.xml',];$fileType = empty($fileToSuffix[$typeCode]) ? 'unknown' : $fileToSuffix[$typeCode];}/*** 上传二进制文件并保存* @param $data 文件内容* @param $uniqueName 唯一文件名* @param string $path 自定义文件保存目录* @return string*/public function uploadBinaryFile($data, $uniqueName, $path = '/file/app/'){$thinkPath = Env::get('root_path');    //框架应用根目录,命名空间为:use think\facade\Env;$thinkPath = str_replace('\\', '/', $thinkPath);   //把 \\ 替换成 /$relativePath = 'public' . $path . date('Y-m-d') . '/';   //文件存放的相对路径(相对应用根目录)$saveDb = $relativePath . $uniqueName;  //存放到数据表的路径$savePath = $thinkPath . $saveDb;       //文件存放的绝对路径$mkdirPath = $thinkPath . $relativePath;if (!is_dir($mkdirPath)) {    //文件夹不存在,则创建;并给最大权限 777mkdir($mkdirPath,0777,true);chmod($mkdirPath,0777);}file_put_contents($savePath, $data);    //保存文件return $saveDb;}
}

PHP接收二进制流文件并保存相关推荐

  1. 微信小程序接收二进制流文件(图片预览,文件打开)

    下面通过downloadOaFile接口获取到二进制流,即res.data 注意!!!直接用downloadOaFile获取的二进制流文件在写入时会导致文件损坏,必须在uni.request对象的属性 ...

  2. php接收二进制流,php接收二进制流【转】

    标签:binary   文件   com   post   进制   二进制   tip   form   生成文件 /** 二进制流生成文件 * $_POST 无法解释二进制流,需要用到 $GLOB ...

  3. vue 后端返回二进制流文件,前端如何实现下载?

    目录 1. axios 请求二进制流文件导出文件 1.1 后台返回的二进制流: 1.2 使用: 1.3 需要注意以下几点: 2. 关于 arraybuffer 和 blob 2.1 ArrayBuff ...

  4. 前端 导出二进制流文件

    前端 导出excel文件 日常项目 会经常碰到 导出pdf excel world 文件,正常来说后端都会返回一个下载链接.前端只需要放到点击事件打开即可,但是有的时候 也会返回一个二进制流文件.看起 ...

  5. python下二进制流文件转二维码

    python下二进制流文件转二维码 之前做过的一个ctf中的misc,经过一系列操作得到一个flag.txt 里面是一串二进制流 突然束手无策 经简单计算 260^2=67600 所以尝试能否转化为一 ...

  6. uniapp 下载文件/二进制流数据文件 ,保存文件 ,打开文件。以及H5下载二进制流文件。

    前提注意点 downloadFile 发送的是GET请求. 如果url接口返回的是二进制流数据.则要求后端content-type 里面填写具体的返回文件类型.否则下在的文件会没有后缀名.比如exce ...

  7. IO 操作 (二进制流文件上传下载)

    后台 二进制流 -> 前台blob对象 ->生成 dateUrl->前台 file->dataUrl -blob ->FormData ->后台 java 后台返回 ...

  8. java读取二进制流文件_java分别通过字节流、字符流、二进制读取文件的代码

    将做工程过程中比较好的一些内容段做个备份,下面的资料是关于 java分别通过字节流.字符流.二进制读取文件的内容,应该是对小伙伴们有些用途. public class Start { public s ...

  9. 微信小程序预览二进制流文件

    开发时使用调试基准库版本 需求 在线预览doc/xls/xlsx/ppt/txt/pdf 的文件和图片. 思路 将后台返回的二进制流,写入微信的文件管理器. 打开文件. 根据文件类型调用不同预览方法 ...

  10. 前端下载二进制流文件

    更多文章 平时在前端下载文件有两种方式,一种是后台提供一个 URL,然后用 window.open(URL) 下载,另一种就是后台直接返回文件的二进制内容,然后前端转化一下再下载. 由于第一种方式比较 ...

最新文章

  1. Spring 自动化装配Bean
  2. Hacker(六)----黑客藏匿之地--系统进程
  3. 2021年春季学期-信号与系统-第八次作业参考答案-第一小题
  4. (二)简单的登陆注册系统--增加验证码部分
  5. java消费者和生产者模型_Java实现简易生产者消费者模型过程解析
  6. 51. ExtJs4之Ext.util.JSON编码和解码JSON对象
  7. 四 Spring的工厂类,xml的配置
  8. jquery function_前端基础进阶(十三)详细图解jQuery扩展jQuery插件
  9. 行政编码json_基于FME国内县级及以上网络公开行政区划边界的获取
  10. 深入浅出asterisk(一):asterisk通道(Channels)
  11. 关于原生AJAX和jQueryAJAX的编程
  12. antd-vue表格实现单击或者双击
  13. 浏览器软件下载,点击超链接、图标等直接下载(前后端代码)
  14. 各种调制方式OFDM(QPSK,16QAM,64QAM)系统性能仿真
  15. 计算机网络本直通线的制作方法,电脑网线制作之交叉线与直通线的做法
  16. 彪悍的人生不需要解释!
  17. Qt利用avilib实现录屏功能_利用CE修改LOL实现各种功能(无限视距、锁定视距、攻击距离、炮塔范围、人物大小等)...
  18. RQNOJ 341 星门跳跃【解题报告】
  19. assoc 和 ftype
  20. 【算法详解】如何使用递归,递归使用的技巧详解

热门文章

  1. 分布式系统中的序列化与反序列化
  2. MongoDB最佳实践
  3. codeforces Roud499Div2 B和C
  4. rdlc报表 矩形高固定_什么是 BI?和报表有什么关系?有了 BI 还要做报表吗?
  5. 评委打分表模板_杭州爸爸自制《奖惩表》火遍网络:请好好爱那个写作业的小孩...
  6. python和c都是什么类型语言-常见的几种语言C,C#,JAVA,Python的运行原理
  7. linux下web目录权限设置
  8. 七牛直播云播放鉴权-时间戳防盗链
  9. 如何合理分配Elasticsearch的分片和副本
  10. 数据库事务4种隔离级别及7种传播行为(三)