You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:11:02