CURL PHP发送文件扩展名错误

时间:2016-01-27 17:04:59

标签: php file curl file-transfer

我试图通过cURL将两个文件发送到API。它似乎工作,除了API回来并说不允许文件类型。答复是:

string(189) 
{
    "StatusId": -1,
    "Success": false,
    "ReturnObject": null,
    "Message": "Please check the file format of the uploaded files. We currently only support .pdf .jpg, .png, .bmp and .gif file extensions.
}

正如您所看到的,API JSON响应意味着它可以看到有文件但只是认为它们没有扩展名。我查看了文件和文件扩展名的绝对URL,它们都是JPG或PDF。有什么想法吗?

这是我的cURL代码:

 // send a file
curl_setopt($request, CURLOPT_POST, true);
curl_setopt(
    $request,
    CURLOPT_POSTFIELDS,
    array(
        'ClientID' => $client,
      'file' =>
          '@'.realpath(__DIR__ . '/..').'/webroot/img/uploads/documents/'.$_FILES['image']['name'],
       'file2' =>
          '@'.realpath(__DIR__ . '/..').'/webroot/img/uploads/documents/'.$_FILES['image1']['name']
    ));
curl_setopt(
    $request, CURLOPT_HTTPHEADER, array(
            "authentication: XXXXXXXXXXXXX",
            "cache-control: no-cache",
            "content-type: multipart/form-data;"));
curl_setopt(
    $request, CURLOPT_CUSTOMREQUEST, "POST");

// output the response
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
var_dump(curl_exec($request));

// close the session
curl_close($request);

1 个答案:

答案 0 :(得分:0)

您使用的是什么API?

如果没有任何具体信息,我只需要大胆猜测:来自API的回复

  

我们目前仅支持.pdf .jpg,.png,.bmp和.gif文件扩展名。

但是,在您的问题中,您提到了文件扩展名

  

都是JPG或PDF。

这里的问题可能是您的文件有大写字母扩展名,例如.JPG和.PDF,但API仅接受小写扩展,例如.jpg和.pdf。某些文件系统(例如Windows上的FAT或NTFS)不关心文件名中的大写或小写,但其他文件系统(例如Linux上的ext4)确实关心。因此,只有在将文件发送到API之前,才尝试将所有扩展名更改为由小写字母组成。

另一种猜测是文件格式,即文件的实际内容,不是API支持的文件格式之一。例如,有人可以使用文本文件foo.txt并将其重命名为foo.jpg。这将负责扩展,但文件的内容仍然是文本而不是JPEG图像。也许API也会检查它。