文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP 接收前端文件后 转发给第三方接口

2023-09-01 16:15

关注

因为各种原因需要,目前有这个需求。php需要接收前端传过来的文件,然后包装成文件流发送到第三方接口,等于是php做一个中转的作用。网上查了很多资料或多或少都有点问题,这里记录一下方便以后自己查看。

第三方java端的接收参数是:@RequestPart("file") MultipartFile file

 

关于php如何接收前端传过来的文件流就不过多说明了,各种办法都有,这边是用的layui上传插件来进行该操作的

layui.use(['upload'], function () {            var upload = layui.upload;              upload.render({                elem: '#imgHead'                , url: "{:url('file.File/uploadFile')}"                , before: function (obj) {                    obj.preview(function (index, file, result) {                        $('#avatarPreview').attr('src', result);                    });                }                , done: function (res) {                    if(!res.success){                        Swal.fire({text: '头像更新失败:'+res.data.msg,icon: 'error',confirmButtonText: '好的'                        })                        return false;                    }                    var userInfo = {                        "id": "{$loginUser['loginUser']['userId']}",                        "logo": res.data.fileUrl                    }                    $.post("{:url('user.UserInfo/updateAvatar')}", userInfo, function (res1) {                        if (res1.success) {Swal.fire({    text: "头像更新成功",    icon: 'success',    confirmButtonText: '好的'})                        } else {Swal.fire({    text: '头像更新失败,请稍后重试',    icon: 'error',    confirmButtonText: '好的'})                        }                    });                }                , error: function () {        }            });        });

php端一句代码就能获取到具体传过来的文件数据

然后用各种办法给保存到临时文件里。不知道还有没有其他不需要保存临时文件的办法,我只写我自己是如何实现的,可能不是最优解,能用就行。

这里使用的是TP6的方法,当然也是可以用其他任何能把文件保存到本地的方法,只要能保存到本地并获取到地址即可。

$file = request()->file('file');$severname = \think\facade\Filesystem::disk('public')->putFile('image/', $file);

最后利用CURLFile把刚刚保存的文件给转换为上传对象,封装后传给第三方接口

            #将临时文件进行处理并使用后端上次接口上传            $url = "http://localhost:8000/api/sysFileInfo/upload";            $data = [                "file"=> new \CURLFile("storage/".$severname),                "secretFlag"=> "Y"            ];            //post请求            $res = HttpTool::post($url,$data);            #删除本地该图片            unlink("storage/".$severname);            #返回图片链接            if($res['success']){                return $res['data']['fileId'];            }else{                return $res;            }
  static function post($url, $msg)  {    $curl = curl_init();    curl_setopt($curl, CURLOPT_URL, $url);    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);    curl_setopt($curl, CURLOPT_POST, 1);    curl_setopt($curl, CURLOPT_HEADER, 0);    curl_setopt($curl, CURLOPT_POSTFIELDS, $msg);    curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data']);    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);    $res = curl_exec($curl);    curl_close($curl);    return json_decode($res, true);  }

自此结束,里面的post参数可不可以增改,请自行尝试。

来源地址:https://blog.csdn.net/zyx7653296/article/details/127783088

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯