PHP接收二进制流文件并保存
目录
- 一、参考
- 二、实现
- 三、请求效果图
- 四、实现代码
一、参考
利用文件头判断文件类型 去看看
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接收二进制流文件并保存相关推荐
- 微信小程序接收二进制流文件(图片预览,文件打开)
下面通过downloadOaFile接口获取到二进制流,即res.data 注意!!!直接用downloadOaFile获取的二进制流文件在写入时会导致文件损坏,必须在uni.request对象的属性 ...
- php接收二进制流,php接收二进制流【转】
标签:binary 文件 com post 进制 二进制 tip form 生成文件 /** 二进制流生成文件 * $_POST 无法解释二进制流,需要用到 $GLOB ...
- vue 后端返回二进制流文件,前端如何实现下载?
目录 1. axios 请求二进制流文件导出文件 1.1 后台返回的二进制流: 1.2 使用: 1.3 需要注意以下几点: 2. 关于 arraybuffer 和 blob 2.1 ArrayBuff ...
- 前端 导出二进制流文件
前端 导出excel文件 日常项目 会经常碰到 导出pdf excel world 文件,正常来说后端都会返回一个下载链接.前端只需要放到点击事件打开即可,但是有的时候 也会返回一个二进制流文件.看起 ...
- python下二进制流文件转二维码
python下二进制流文件转二维码 之前做过的一个ctf中的misc,经过一系列操作得到一个flag.txt 里面是一串二进制流 突然束手无策 经简单计算 260^2=67600 所以尝试能否转化为一 ...
- uniapp 下载文件/二进制流数据文件 ,保存文件 ,打开文件。以及H5下载二进制流文件。
前提注意点 downloadFile 发送的是GET请求. 如果url接口返回的是二进制流数据.则要求后端content-type 里面填写具体的返回文件类型.否则下在的文件会没有后缀名.比如exce ...
- IO 操作 (二进制流文件上传下载)
后台 二进制流 -> 前台blob对象 ->生成 dateUrl->前台 file->dataUrl -blob ->FormData ->后台 java 后台返回 ...
- java读取二进制流文件_java分别通过字节流、字符流、二进制读取文件的代码
将做工程过程中比较好的一些内容段做个备份,下面的资料是关于 java分别通过字节流.字符流.二进制读取文件的内容,应该是对小伙伴们有些用途. public class Start { public s ...
- 微信小程序预览二进制流文件
开发时使用调试基准库版本 需求 在线预览doc/xls/xlsx/ppt/txt/pdf 的文件和图片. 思路 将后台返回的二进制流,写入微信的文件管理器. 打开文件. 根据文件类型调用不同预览方法 ...
- 前端下载二进制流文件
更多文章 平时在前端下载文件有两种方式,一种是后台提供一个 URL,然后用 window.open(URL) 下载,另一种就是后台直接返回文件的二进制内容,然后前端转化一下再下载. 由于第一种方式比较 ...
最新文章
- Spring 自动化装配Bean
- Hacker(六)----黑客藏匿之地--系统进程
- 2021年春季学期-信号与系统-第八次作业参考答案-第一小题
- (二)简单的登陆注册系统--增加验证码部分
- java消费者和生产者模型_Java实现简易生产者消费者模型过程解析
- 51. ExtJs4之Ext.util.JSON编码和解码JSON对象
- 四 Spring的工厂类,xml的配置
- jquery function_前端基础进阶(十三)详细图解jQuery扩展jQuery插件
- 行政编码json_基于FME国内县级及以上网络公开行政区划边界的获取
- 深入浅出asterisk(一):asterisk通道(Channels)
- 关于原生AJAX和jQueryAJAX的编程
- antd-vue表格实现单击或者双击
- 浏览器软件下载,点击超链接、图标等直接下载(前后端代码)
- 各种调制方式OFDM(QPSK,16QAM,64QAM)系统性能仿真
- 计算机网络本直通线的制作方法,电脑网线制作之交叉线与直通线的做法
- 彪悍的人生不需要解释!
- Qt利用avilib实现录屏功能_利用CE修改LOL实现各种功能(无限视距、锁定视距、攻击距离、炮塔范围、人物大小等)...
- RQNOJ 341 星门跳跃【解题报告】
- assoc 和 ftype
- 【算法详解】如何使用递归,递归使用的技巧详解
热门文章
- 分布式系统中的序列化与反序列化
- MongoDB最佳实践
- codeforces Roud499Div2 B和C
- rdlc报表 矩形高固定_什么是 BI?和报表有什么关系?有了 BI 还要做报表吗?
- 评委打分表模板_杭州爸爸自制《奖惩表》火遍网络:请好好爱那个写作业的小孩...
- python和c都是什么类型语言-常见的几种语言C,C#,JAVA,Python的运行原理
- linux下web目录权限设置
- 七牛直播云播放鉴权-时间戳防盗链
- 如何合理分配Elasticsearch的分片和副本
- 数据库事务4种隔离级别及7种传播行为(三)