当前位置: 首页 > backend >正文

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

测试无误,欢迎大家指正。

http://www.xdnf.cn/news/15871.html

相关文章:

  • Linux基础命令详解:从入门到精通
  • prometheus 黑盒监控和docker检测
  • git操作
  • Node.js:常用工具、GET/POST请求的写法、工具模块
  • ByteBuf 体系的设计与实现
  • `tidyverse` 长表、宽表的处理
  • 【HarmonyOS】ArkUI - 自定义组件和结构重用
  • 处理Electron Builder 创建新进程错误 spawn ENOMEM
  • Spring AI 聊天记忆
  • 28.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--币种服务(二)
  • Spring Boot 配置文件解析
  • SpringBoot集成MyBatis的SQL拦截器实战
  • Java学习第六十部分——JVM
  • [硬件电路-52]:什么是模拟电路与数字电路;它们的共同点、核心差异点(原理、目标、关注点等)以及它们如何相互转化
  • LeetCode 852:山脉数组的峰顶索引解析与实现
  • STM32CubeMX的一些操作步骤的作用
  • 7-20 关于mysql
  • 网络安全隔离技术解析:从网闸到光闸的进化之路
  • 【硬件】GalaxyTabPro10.1(SM-T520)刷机/TWRP/LineageOS14/安卓7升级小白向保姆教程
  • RxSwift-事件属性
  • JVM-Java
  • LINUX(三)文件I/O、对文件打开、读、写、偏移量
  • 股票及金融笔记
  • 使用Qt6 QML/C++ 和CMake构建海康威视摄像头应用(代码开源)
  • 双8无碳小车“cad【17张】三维图+设计说名书
  • 【橘子分布式】gRPC(编程篇-下)
  • 嵌入式硬件篇---机械臂运动学解算(3自由度)
  • 机器学习-数据预处理
  • 【机器学习【9】】评估算法:数据集划分与算法泛化能力评估
  • 物联网安装调试-继电器