我需要通过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
答案 0 :(得分:4)
对于那些通过Google访问此页面的人。这是一种对我有用的方法。
不要一起使用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();
答案 1 :(得分:3)
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();