Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Guzzle重写curl(文件上传)-PHP_Php_Curl_Guzzle_Symfony 2.7_Zendesk Api - Fatal编程技术网

用Guzzle重写curl(文件上传)-PHP

用Guzzle重写curl(文件上传)-PHP,php,curl,guzzle,symfony-2.7,zendesk-api,Php,Curl,Guzzle,Symfony 2.7,Zendesk Api,我正在尝试将一个文件上载到我的服务器,然后将该文件发送到Zendesk。Zendesk文档展示了如何: curl "https://{subdomain}.zendesk.com/api/v2/uploads.json?filename=myfile.dat&token={optional_token}" \ -v -u {email_address}:{password} \ -H "Content-Type: application/binary" \ --data-bi

我正在尝试将一个文件上载到我的服务器,然后将该文件发送到Zendesk。Zendesk文档展示了如何:

curl "https://{subdomain}.zendesk.com/api/v2/uploads.json?filename=myfile.dat&token={optional_token}" \
  -v -u {email_address}:{password} \
  -H "Content-Type: application/binary" \
  --data-binary @file.dat -X POST
这个很好用。我现在必须用Guzzle(版本6)重写这个。 我正在使用Symfony 2.7:

$file = $request->files->get('file');

$urlAttachments = $this->params['base_url']."/api/v2/uploads.json?filename=".$file->getClientOriginalName();

$body = [
        'auth' => [$this->params['user'], $this->params['pass']],
        'multipart' => [
        [
            'name'     => $archivo->getClientOriginalName(),
            'contents' => fopen($file->getRealPath(), "r"),
        ],
    ]
];

$client = new \GuzzleHttp\Client();
$response = $client->request('POST', $urlAttachments, $body);
$response = json_decode($response->getBody(), true);
该文件正在上载,但当我下载它时,它的内容中也会包含一些元数据(破坏一些其他文件类型)。我想我没有正确上传,因为卷发的另一种方式很好

--5b8003c370f19
Content-Disposition: form-data; name="test.txt"; filename="php6wiix1"
Content-Length: 1040

... The rest of the original content of the test file...

--5b8003c370f19--
我不知道为什么这些数据也是作为文件的一部分发送的(我不想这样),或者使用multipart是否可以


谢谢你的帮助

It可以使用
multipart
,但服务器必须正确处理。无论您是否使用它,它都是一个不同的请求主体

它通常在HTML表单中使用(多个)文件上载。文件被命名(因此元信息),因此可以有多个文件。文件中还可能有正常格式的字段(文本)。你可能会找到更好的解释,只是想简单解释一下

在您的案例中,服务器处理多部分表单数据的方式似乎与“二进制post”没有什么不同,因此它保存了所有内容,包括元信息

用于传递未加工的身体,并通过口吻向您的
curl
发出相同的请求:

$urlAttachments=$this->params['base_url']。”/api/v2/uploads.json?filename=“.$file->getClientOriginalName();
$opts=[
//认证
“body”=>fopen($file->getRealPath(),“r”),
'headers'=>['Content-Type'=>'application/binary'],
];
$client=new\GuzzleHttp\client();
$response=$client->request('POST',$urlAttachments,$opts);

太棒了!!这成功了!!我还必须增加nginx和phpfpm的上传大小。谢谢