当上传带有cURL的文件时,文件会被标头信息修改

问题描述 投票:0回答:1

当使用cURL上传文件时,我发现远程端的文件正在被修改,并且标头信息被转储到文件中。我怀疑这是我的标头信息中的内容,但是我已经迷失了。我几乎在尝试任何事情。

这是我正在使用的代码。

$fLocation = realpath('file.csv');  
$finfo = finfo_open(FILEINFO_MIME_TYPE);  
$fType = finfo_file($finfo, $fLocation);  
finfo_close($finfo);      
$cFile = curl_file_create($fLocation);  
$post = array('file'=> $cFile);  
$ch = curl_init();  
curl_setopt($ch, CURLOPT_URL, $url);  
curl_setopt($ch, CURLOPT_POST,1);  
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);  
curl_setopt($ch, CURLOPT_USERPWD, $username.":".$password);  
curl_setopt($ch, CURLOPT_HTTPHEADER, "Content-Type: application/octet-stream");  
$result = curl_exec($ch);  

我已经为报头尝试了几种不同的Content-Type,从应用程序/二进制文件到multipart / form-data,甚至根本没有在报头中发送content-type。我怀疑我需要在标题中添加更多内容。

无论如何,我要发送的文件是.csv,但我想最后发送.xlsx文件(我正在使用.csv进行测试)。当我从远程服务器获取文件并在文本编辑器中将其打开时,我看到在文件的开头和结尾添加了信息,并且文件的原始数据介于两者之间。这是添加到顶部的内容。

=--------------------------a0fe4530540c659b  
Content-Disposition: form-data; name="file"; filename="/home/username/website/path/file.csv"  
Content-Type: application/octet-stream 

而且,底部

--------------------------a0fe4530540c659b--

基本上,当我的所有.xlsx文件到达另一边时,它们都损坏了,我想出了这个办法。我将发送的内容更改为纯文本文件(CSV),那时我才意识到发生了什么。

这里有更多有趣的信息。实际上,我实际上是通过它们的API向ZenDesk发送一些东西,而我显然是在PHP中使用cURL进行此操作。当我从Zendesk收到JSON回复时,其中一部分看起来像这样...

[file_name] => file.csv  
[content_url] => https://org.zendesk.com/attachments/token/jdjdjdjdjdjhdjdjdj/?name=file.csv  
[content_type] => multipart/form-data  
[size] => 5615  

有趣的是,看到我上传的内容是多部分/表单数据。即使更改标题中的Content-Type,这仍然适用。

当然我在这里缺少愚蠢和容易的东西。

php curl content-type zendesk zendesk-api
1个回答
0
投票

您无需设置标题,例如Content-Type: application/octet-stream或其他即可上传文件。只需使用curl_file_create方法发送文件即可。

您的代码必须是这样的东西:

curl_file_create
© www.soinside.com 2019 - 2024. All rights reserved.