Laravel HTTP Client:多字段Multipart请求创建方法咨询
Laravel HTTP Client 构建多字段(含数组值)的Multipart请求
基础多字段Multipart请求
当需要发送包含普通字段和文件的Multipart请求时,操作很直接:调用attach()添加文件字段的同时,在post()(或其他请求方法)的第二个参数中传入普通字段数组即可。Laravel会自动将所有字段(普通字段+文件)打包成标准的multipart/form-data请求。
示例代码:
$response = Http::attach( // 添加文件字段 'avatar', file_get_contents(storage_path('app/avatar.jpg')), 'user-avatar.jpg' )->post('https://your-api-endpoint.com/profile', [ // 普通文本字段 'username' => 'johndoe', 'full_name' => 'John Doe', 'age' => 30 ]);
包含数组值的字段处理
如果要传递数组形式的字段(比如多选标签、嵌套元数据),直接在请求参数数组中传入PHP数组即可。Laravel HTTP Client会自动将其转换为符合Multipart规范的格式(比如生成tags[]形式的字段名)。
示例代码:
$response = Http::attach( 'project_document', file_get_contents(storage_path('app/report.pdf')), 'project-report.pdf' )->post('https://your-api-endpoint.com/submit-project', [ 'project_name' => 'Laravel API Refactor', // 数组形式的字段 'tags' => ['laravel', 'api', 'refactor'], // 嵌套数组也支持 'metadata' => [ 'author' => 'Jane Smith', 'created_at' => '2024-05-20', 'version' => '1.0.0' ] ]);
手动构建所有Multipart部分(进阶用法)
如果需要对每个Multipart部分做精细控制(比如自定义字段的Content-Type、字段名),可以使用MultipartBody类手动构建请求体:
use Illuminate\Http\Client\MultipartBody; $multipartBody = MultipartBody::make() // 添加普通文本字段 ->part('username', 'johndoe') ->part('email', 'john@doe.com') // 添加数组字段 ->part('roles', ['admin', 'editor']) // 添加文件字段,可指定Content-Type ->file('attachment', file_get_contents(storage_path('app/data.csv')), 'data.csv', [ 'Content-Type' => 'text/csv' ]); $response = Http::withBody( $multipartBody, 'multipart/form-data' )->post('https://your-api-endpoint.com/upload');
内容的提问来源于stack exchange,提问作者vbulash
相关产品推荐
相关产品推荐

