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

使用GuzzleHttp上传文件至Box失败报415错误,求解决方案

解决Box文件上传的415错误 & 优化Guzzle实现

嘿,这个415错误其实很好搞定——问题出在你设置的请求类型和参数结构上。Box的文件上传接口要求用multipart/form-data来发送请求(毕竟要传文件二进制数据),而不是你用的application/x-www-form-urlencoded,而且参数的组织方式也得调整。

下面是修正后的GuzzleHttp实现代码,这也是贴合Box API规范的最优写法:

use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Utils;

// 初始化Guzzle客户端
$client = new Client();

try {
    $response = $client->request('POST', 'https://upload.box.com/api/2.0/files/content', [
        'headers' => [
            'Authorization' => "Bearer {$access_token}",
            // 这里不用手动设置Content-Type,Guzzle会自动处理multipart请求的类型
        ],
        'multipart' => [
            // attributes参数需要转成JSON字符串传给Box
            [
                'name' => 'attributes',
                'contents' => json_encode([
                    'name' => $file, // 上传后显示的文件名
                    'parent' => ['id' => $parent_id] // 父文件夹ID,注意是键值对格式
                ])
            ],
            // 要上传的文件部分,用文件流的方式更可靠
            [
                'name' => 'file',
                'contents' => Utils::tryFopen($filePath, 'r'),
                'filename' => $file // 可选,如果想让上传后的文件名和本地文件不同,可以改这里
            ]
        ]
    ]);

    // 解析并处理上传结果
    $uploadResult = json_decode($response->getBody(), true);
    print_r($uploadResult);
} catch (\GuzzleHttp\Exception\ClientException $e) {
    // 捕获错误时输出详细响应,方便排查Box返回的具体问题(比如权限、文件名重复)
    echo '错误提示: ' . $e->getMessage() . PHP_EOL;
    echo 'Box返回详情: ' . $e->getResponse()->getBody()->getContents() . PHP_EOL;
}

关键细节拆解:

  • 用multipart选项替代手动设置Content-Type:Guzzle会自动生成带boundary的multipart/form-data类型头,完全符合Box的要求。
  • attributes必须是JSON字符串:Box API明确要求这个参数是JSON格式,所以一定要用json_encode()把数组转成字符串。
  • 文件流上传更稳妥:Utils::tryFopen()是Guzzle推荐的文件处理方式,不仅能避免文件读取失败的问题,对大文件上传也更友好。
  • 优化错误捕获:catch块里输出Box的响应内容,能帮你快速定位除了415之外的其他问题(比如权限不足、父文件夹不存在等)。

如果需要上传超过50MB的大文件,Box推荐用分块上传API,不过上面的代码足够覆盖绝大多数常规文件上传场景啦。

内容的提问来源于stack exchange,提问作者Manojkumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:00:33