HTTPful在一个请求中附加文件和json主体



我需要通过Rest上传文件,并用它发送一些配置。

这是我的示例代码:

$this->login();
$files = array('file'=>'aTest1.jpg');
$data =
array(
'name'=>'first file',
'description'=>'first file description',
'author'=>'test user'
);
$response = Request::post($this->getRoute('test'))
->addHeader('Authorization', "Bearer " . $this->getToken())
->attach($files)
->body(json_encode($data))
->sendsJson()
->send();

我可以发送文件或发送正文。但如果我两者都尝试,那就行不通了。。。

有什么提示吗?

问候n00n

对于那些通过谷歌访问此页面的人。这是一个对我有效的方法。

不要同时使用attach()和body()。我发现一个会清除另一个。相反,只需使用body()方法。使用file_get_contents()获取文件的二进制数据,然后使用base64_encode()将该数据作为参数放入$data中。

它应该与JSON配合使用。这种方法适用于application/x-www-form-urlencoded mime类型,使用$req->body(http_build_query($data));。

$this->login();
$filepath = 'aTest1.jpg';
$data =
array(
'name'=>'first file',
'description'=>'first file description',
'author'=>'test user'
);
$req = Request::post($this->getRoute('test'))
->addHeader('Authorization', "Bearer " . $this->getToken());
if (!empty($filepath) && file_exists($filepath)) {
$filedata = file_get_contents($filepath);
$data['file'] = base64_encode($filedata);
}
$response = $req
->body(json_encode($data))
->sendsJson();
->send();

body()方法会擦除payload内容,因此在调用attach()后,必须自己填写payload

$request = Request::post($this->getRoute('test'))
->addHeader('Authorization', "Bearer " . $this->getToken())
->attach($files);
foreach ($parameters as $key => $value) {
$request->payload[$key] = $value;
}
$response = $request
->sendsJson();
->send();

相关内容

  • 没有找到相关文章