thinkphp8\guzzlehttp上传文件应用示例
use GuzzleHttp\Client;
use GuzzleHttp\Psr7; // 这个必须引用;
use think\Request;
use think\response\Json;public function uploadMultipleFiles(Request $request): Json{$user = input('post.user');$database = input('post.database');// 获取上传的文件数组$files = $request->file('files');if (empty($files)) {return json(['code' => 400, 'message' => 'No files uploaded']);}// 准备 Guzzle HTTP 客户端$client = new Client();// 使用 array_map 遍历文件数组,简化代码$multipartData = array_map(function($file) {return ['name' => 'files', // 通过 Guzzle 会自动处理多文件上传'contents' => Psr7\Utils::tryFopen($file->getPathname(), 'rb'), // 二进制读取'filename' => $file->getOriginalName(),'headers' => ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']];}, $files);// 合并文件数据与其他表单数据$multipartData = array_merge($multipartData, [['name' => 'database', 'contents' => $database],['name' => 'confirm', 'contents' => true], // confirm 字段传布尔值]);// dd($multipartData);try {// 发送请求$response = $client->request('POST', 'http://IP:6097/upload-multiple?user=' . $user, ['multipart' => $multipartData]);// 获取并处理响应$body = $response->getBody()->getContents();$data = json_decode($body, true);return json(['code' => 200, 'message' => 'Files uploaded successfully', 'data' => $data]);} catch (\Exception $e) {// 简化异常处理return json(['code' => 500, 'message' => 'Upload failed: ' . $e->getMessage()]);}}
环境:tp8.0及以上版本、php8.3、guzzlehttp7.9
测试无误,欢迎大家指正。