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
测试无误,欢迎大家指正。