php后台用curl_file_create发送文件
公司项目遇到一个问题,做了一个项目用于展示小视频,类似抖音的功能
上传视频截取第一帧作为封面。遇到问题,苹果手机拍摄的视频截帧会出现图片翻转。
之前遇到图片上传翻转可以用EXFJS库处理,读取信息,重新旋转回来。
问题是上传的是视频,没有找到对应的库,截帧的图片也没有带EXF头信息。
目前只能后台人工审核视频的时候,把翻转的封面图片旋转回来
视频上传到阿里OSS
由于没有处理好图片翻转问题,封面第一帧采用阿里视频处理,带参数截取视频第一帧
图片的url是:xxxx.mp4?x-oss-process=video/xxxx 这样的形式
这种形式无法用OSS图片处理参数(rotate) 旋转图片,所以需要后端处理,
- 下载图片
- 上传到OSS,图片的url变成:xxx.jpg?x-oss-precess=image/xxx 的形式,可以用旋转参数处理
- 前端增加一个旋转按钮,发送请求到后端,后端替换图片url,并加上前端传过来的旋转参数,把url更新入库保存,新的url返回给前端,完成图片旋转
遇到的问题
没有做过后端发送文件,查找到的资料都是,前端上传文件,php后台接收。经过一番查找,找到以下方法,php发送文件
- curl_file_create 方法
- new CURLFile() 对象
// Create a cURL handle
$ch = curl_init($url);
// Create a CURLFile object
$cfile = curl_file_create($tmpPath, 'image/jpg', $tmpPath);
// Assign POST data
$data = array(
'key' => 'Gn1xVdBiTClSSHKZ是滴QSU5XGagWO',
'file' => $cfile
);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// Execute the handle
$postReturn = curl_exec($ch);
curl_close($ch);
echo $postReturn;
待优化问题
- 文件下载用的是
file_get_contents
获取文件字符串, - 把文件字符串写入到文件
file_put_content
- 读取文件,发送数据
这里我有一个问题,可不可以跳过第二步呢?第一步读取文件,把文件转出第三步要发送的数据格式,减少一步对服务器的写操作。我不知道这样可不可以实现,先把问题提出来,学艺不精。