首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用Guzzle重写curl (文件上传)- PHP

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

Stack Overflow用户
提问于 2018-08-24 21:31:36
回答 1查看 2.8K关注 0票数 2

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
$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);

文件正在上传,但当我下载它时,它也会在其内容中获得一些元数据(破坏了一些其他文件类型)。我想我没有正确上传它,因为卷曲的另一种方式很好用。

代码语言:javascript
复制
--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是否可以。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-25 03:19:14

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

它通常用在具有(多次)文件上传的HTML表单中。文件被命名(因此是元信息),所以可以有多个文件。文件中也可能有标准的表单字段(文本)。你可能会找到一个更好的解释,by searching,只是想给出一个简短的解释。

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

使用body传递一个原始的正文,并通过Guzzle向您的curl生成相同的请求:

代码语言:javascript
复制
$urlAttachments = $this->params['base_url']."/api/v2/uploads.json?filename=".$file->getClientOriginalName();

$opts = [
    // auth
    'body' => fopen($file->getRealPath(), "r"),
    'headers' => ['Content-Type' => 'application/binary'],
];

$client = new \GuzzleHttp\Client();
$response = $client->request('POST', $urlAttachments, $opts);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52005604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档