PHP处理前后端分离,上传文件binary数据

上周在做后台的时候,用到vue项目进行前后端分离,由于此前一直都是利用form表单的formdata上传文件。虽然以往也有接触过前后端分离的项目,但是鉴于比较少用到上传的功能,所以在接收前端发过来的文件的时候一直用$_FILESS一直都接收不到文件$_POST也接收不到文件,后面各种搜索引擎也无果。

后续用postman的时候测试了一下看了请求头和请求反映之后才发现原来数据是存放在HTTP_RAW_POST_DATA的,需要用file_get_contents(‘php://input’)才可以接受并且传递的是二进制流文件,所以用以往的move_uploaded_file是完全不奏效的。

分析后的请求方式:

<?php
/** php 接收流文件
* @param  String  $file 接收后保存的文件名
* @return boolean
*/
function receiveStreamFile($receiveFile){
    $streamData = isset($GLOBALS['HTTP_RAW_POST_DATA'])? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
    if(empty($streamData)){
        $streamData = file_get_contents('php://input');
    }
    if($streamData!=''){
        $ret = file_put_contents($receiveFile, $streamData, true);
    }else{
        $ret = false;
    }
    return $ret;
}

$receiveFile = 'test.xlsx';
$ret = receiveStreamFile($receiveFile);
echo json_encode(array('success'=>(bool)$ret));

利用file_get_contents接受传递二进制流文件,然后根据定义好的空文件,将内容利用file_put_contents存放进去然后就可以了。记得以前听同学讲过一句话,内事不决问百度,外事不决问谷歌。又上了一堂课。

Comments: 0

「人生在世,留句话给我吧」

提交评论