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

调用API上传图片时收到"Receipt upload failed"响应,原因何在?

上传失败的可能原因及对应问题点

1. 代码语法错误导致临时文件未生成

代码中存在明显语法错误:

// 错误写法:多了多余的`file`关键字
file file_put_contents($imagePath, $imageData); 

正确写法应为:

file_put_contents($imagePath, $imageData);

这个错误会直接导致PHP执行报错,临时图像文件根本无法写入,后续向外部API传递的是无效的文件路径,必然导致上传失败。

2. 外部API无法读取本地临时文件路径

你向外部API的JSON请求体中传递的是当前服务器的本地临时文件路径($imagePath),但外部API运行在不同的服务器环境中,无法直接访问你服务器上的本地文件路径,它无法通过这个路径获取到图像内容。

如果外部API需要接收文件内容,你需要采用multipart/form-data格式上传文件,而不是传递本地路径。可以使用PHP的CURLFile类来构建文件上传请求,示例如下:

// 替换原有JSON请求体部分
$post_data = [
    'image' => new CURLFile($imagePath)
];

// 调整cURL选项,不需要JSON编码,也不需要设置Content-Type为application/json
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, []); // 移除Content-Type: application/json,让cURL自动设置multipart/form-data

3. Base64字符串可能包含无效前缀

如果Postman发送的Base64字符串带有data:image/jpeg;base64,这类前缀,直接使用base64_decode会导致解码失败,生成的图像文件损坏。需要先去除前缀再解码:

// 去除Base64前缀
if (strpos($base64String, 'base64,') !== false) {
    $base64String = substr($base64String, strpos($base64String, 'base64,') + 7);
}
$imageData = base64_decode($base64String);

4. API请求URL拼接错误

URL拼接部分缺少斜杠,导致路径无效:

// 错误写法:expense-category和exp_id直接拼接,会生成类似/rfnextgenapi/api/v1/expense-category90的路径
$request_url = "/rfnextgenapi/api/v1/expense-category". $exp_id;

正确的URL应该在expense-category后加斜杠:

$request_url = "/rfnextgenapi/api/v1/expense-category/" . $exp_id;

无效的URL会导致请求无法到达正确的API端点,返回上传失败。

5. 临时文件权限问题

sys_get_temp_dir()返回的临时目录可能存在权限限制,导致file_put_contents无法写入文件。可以添加错误检查:

if (!file_put_contents($imagePath, $imageData)) {
    die('无法写入临时图像文件');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:07:47