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

如何通过PHP Curl Form Data将服务器存储的PDF发送至另一服务器

PHP Curl 发送服务器PDF文件至第三方API解决方案

核心问题梳理

你需要通过PHP Curl以Form Data形式,将服务器上的PDF文件发送到第三方API,当前卡在文件读取、Form Data构造及POST请求发送环节。你尝试的临时文件方案方向可行,但存在可优化的细节。

优化后的代码实现

如果PDF已在本地服务器,直接使用本地路径效率更高;如果是远程PDF,可优化临时文件逻辑:

// 情况1:PDF在本地服务器,直接使用绝对路径
$pdfFilePath = '/your/server/path/employee_manual3.pdf';

// 情况2:PDF是远程文件,先保存到临时文件(优化原有逻辑)
// $remotePdfUrl = "https://url/employee_manual3.pdf";
// $tempFile = tempnam(sys_get_temp_dir(), 'PDF_');
// file_put_contents($tempFile, file_get_contents($remotePdfUrl));
// $tempPdfFile = $tempFile . '.pdf';
// rename($tempFile, $tempPdfFile);
// $pdfFilePath = $tempPdfFile;

// 初始化Curl
$curl = curl_init();

// 构造CURLFILE对象,显式指定MIME类型和发送文件名
$uploadFile = new CURLFILE(
    $pdfFilePath,
    'application/pdf',
    'employee_manual3.pdf' // 发送到API时的文件名,可按需修改
);

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://API_URL',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_POST => true, // 用标准POST方式替代CUSTOMREQUEST
    CURLOPT_POSTFIELDS => [
        'file' => $uploadFile // 字段名需与API要求一致,比如有的API要求uploadedFile
    ],
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer API_TOKEN_HERE',
        // 不要手动设置multipart/form-data,Curl会自动生成带正确边界符的请求头
        'Cookie: YOUR_COOKIE_VALUE'
    ],
]);

$response = curl_exec($curl);

// 捕获Curl错误,方便调试
if(curl_errno($curl)) {
    echo "请求错误:" . curl_error($curl);
}

curl_close($curl);
echo $response;

// 若使用了临时文件,请求完成后清理
// unlink($pdfFilePath);

关键注意事项

  • 禁止手动设置Content-Type: multipart/form-data:Curl会根据CURLFILE自动生成包含正确边界符的请求头,手动设置会导致API无法解析文件。
  • 显式配置文件信息:CURLFILE的第二个参数指定MIME类型(application/pdf),第三个参数设置发送到API的文件名,确保API能正确识别文件类型。
  • 优先使用本地路径:如果PDF已在服务器本地,直接用绝对路径即可,无需临时文件,减少IO开销。
  • 错误排查机制:添加curl_errno和curl_error捕获请求异常,快速定位问题。
  • 临时文件清理:若使用了临时文件,请求结束后用unlink删除,避免占用服务器磁盘空间。

常见问题排查

  1. API返回文件不存在:检查CURLOPT_POSTFIELDS里的字段名是否与API要求一致(比如部分API要求字段名为uploadedFile)。
  2. 请求超时:调整CURLOPT_TIMEOUT的值,或检查服务器与API地址的网络连通性。
  3. 权限报错:确保PHP进程有读取本地PDF文件的权限,临时目录有写入权限。

内容的提问来源于stack exchange,提问作者Roshan Kumar Jha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:50:22