示例使用的是ThinkPHP,curl使用的是我自己整合的Model

请输入图片描述

一、需求

在进行 API FIRST 开发的时候,如果涉及文件的传输,是一个比较麻烦的问题。

二、解决

1. 客户端获取文件

用户在选择上传文件的时候在web客户端最常见的做法就是使用 input type=file 来做

如果客户端使用PHP开发,则用户在 submit 表单之后,进行客户端的文件处理。

Html 文件示例

<form action="form/work" method="post" enctype="multipart/form-data">
    <p><input type="file" name="file" class="file"></p>
    <p><button type="submit">submit</button></p>
</form>

2. 客户端处理文件

客户端在处理表单的时候首先 将表单的文件存储到客户端本地 uploads 文件夹

将存储好的 uploads 进行后缀、大小的基本处理后拿到文件。

将文件通过 curl 传输到 API。

public function formWork(Request $request){
    $file=$request->file('file');
    $info=$file->move(ROOT_PATH . 'public' . DS . 'uploads' . DS . '1');
    if($info){
        $path=$info->getPath().DS.$info->getFilename();
        $data=['test_file'=>curl_file_create($path,'image/jpeg'),];
        $header=['Content-type:multipart/form-data'];
        $Curlhttp=new CurlHttp();
        $res=$Curlhttp->curlGet('www.ptbird.cn',[],[]);
    }
}

三、关键点

在使用 CURL 传输到 API 的时候,我使用的是我整合的 Model

我整合的CURL Model 有一个详细的说明,可以拿出函数来单独用,地址:

存储到本地的目的是为了当发送失败的时候,可以再次读取发送。