IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 图片转换成文件流请求文件上传接口 -> 正文阅读

[开发测试]图片转换成文件流请求文件上传接口

项目场景:

绝对路径图片转换成文件流请求文件上传接口


因为我的uploadImgAndFile 接口接收的是前端传的文件流来调用华为云obs 如果我想将一张绝对路径的文件传到华为云 需要将其转换成文件流来请求接口 以下是代码。

@Override
    //请求接口地址 参数 文件
    function upload($url='https://api.xhjrbkp.com/api/file/uploadImgAndFile', $data='', $file='https://img.xhjrbkp.com/MTYzOTEwNjc5NXE1T3NDeDdQ.6m.png') {
        $param = [
            //此处根据实际文件的上传的 name 填写
            'file' => file_get_contents($file),
            'type' =>1,
        ];
        if (!empty($data)) {
            arrary_merge($data, $param);
        }
        $delimiter = uniqid();
        $data = '';
        $eol = "\r\n";
        $upload = $param['file'];
        unset($param['file']);
        foreach ($param as $name => $content) {
            $data .= "--" . $delimiter . "\r\n"
                . 'Content-Disposition: form-data; name="' . $name . "\"\r\n\r\n"
                . $content . "\r\n";
        }
        // 拼接文件流  name="fileData"; filename="1.png"' 根据实际的文件 name 和名字填写 或写个变量
        //'Content-Type: image/gif'可改为'Content-Type:application/octet-stream' 由于我是测试的网站必须为 gif 所以就这样吧先
        $data .= "--" . $delimiter . $eol
            . 'Content-Disposition: form-data; name="file"; filename="https://img.xhjrbkp.com/MTYzOTEwNjc5NXE1T3NDeDdQ.6m.png"' . "\r\n"
            . 'Content-Type: image/gif' . "\r\n\r\n";

        $data .= $upload . "\r\n";
        $data .= "--" . $delimiter . "--\r\n";
        $post_data = $data;
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_HTTPHEADER, [
            "Content-Type: multipart/form-data; boundary=" . $delimiter,
            "Content-Length: " . strlen($post_data),
        ]);
        $response = curl_exec($curl);
        curl_close($curl);
        return $response;
    }
@Override
     public function uploadImgAndFile(Request $request){
        $file=$request->file('file');
        $type=input('type');
        $id=input('id');
        if($type==1){
            $prefix='platform_'.$id;
        }elseif($type==2){
            $prefix='general_backstage';
        }
        if(empty($file)){
            $data = ['code' => 400, 'msg' => '文件不能为空', 'data' => ''];
            return json($data);
        }else{
                $info = $file->getInfo();
                //上传文件最大大小,单位M
                $maxSize = 10;
                //支持的上传文件类型
                $allowed_extensions = ["png", "jpg", "gif","pdf"];
                //返回信息json
                $data = ['code' => 400, 'msg' => '上传文件失败', 'data' => ''];
                if ($info['error']>0) {
                    $data['msg'] = $_FILES["file"]["error"];
                    return json($data);
                } else {
                    //检测文件类型
                    if (!in_array(strtolower(substr(strrchr($info['name'], '.'), 1)), $allowed_extensions)) {
                        $data['msg'] = "请上传" . implode(",", $allowed_extensions) . "格式的文件";
                        return json($data);
                    }
                    //检测文件大小
                    if ($info['size'] > $maxSize * 1024 * 1024) {
                        $data['msg'] = "文件大小限制" . $maxSize . "M";
                        return json($data);
                    }
                }
                $newFile = $prefix.'/'.date('Ymd')."/".getRandomString(10).strrchr($info['name'], '.');
                try {
                    $resp = $this->obsClient->putObject([
                        'Bucket' => $this->bucketName,//桶名
                        'Key' => $newFile,// (文件路径1/文件路径2/文件名.文件后缀)
                        'Body' =>$file,
                        'ACL' => ObsClient::AclPublicRead,//设置对象访问权限为公共读
                    ]);

                    if($resp ['HttpStatusCode']==200){//$resp ['HttpStatusCode']状态码 200就是成功
                        $data = [
                            'code' => 200,
                            'msg' => '上传文件成功',
                            'data' => $resp ['ObjectURL'],//华为云上的文件地址
                        ];
                    }else{
                        $data['mess'] = $resp ['HttpStatusCode'].':'.$resp['Reason'];
                    }
                } catch ( ObsException $e ) {
                    $data['msg']=$e->getMessage();
                }
            return json($data);
        }
    }

批注:

用于个人总结,菜鸟一枚大佬轻喷,如有问题欢迎指证,如果对大家有帮助那再好不过;

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 14:14:47  更:2022-01-01 14:15:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 5:55:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码