如何解决如何使用Laravel将接收的文件发送到外部API
我有一个接收文件的laravel api,我必须保存并将该文件发送到另一个(外部)api。
我可以将文件保存到存储中,但是不能将文件发送到外部api。
我的上传方法是:
public function upload(Request $request) {
if ($request->hasFile('image')
&& $request->file('image')->isValid()) {
$name = $request->userid;
$extension = $request->image->extension();
$nameFile = "prefix_{$name}.{$extension}";
$file = $request->image;
$file->storeAs('users',$nameFile);
$this->sendFile('./storage/users/' . $nameFile,$request->sellerid,'type');
$url = 'http://'.$_SERVER['HTTP_HOST'] . '/storage/users/' . $nameFile;
return $url;
}
}
这可行,但是 sendDocument 函数不起作用:
private function sendFile($file,$sellerid,$type)
{
$auth = 'XXXX';
$curl = curl_init();
curl_setopt_array($curl,array(
CURLOPT_URL => "https://api.url.com/",CURLOPT_RETURNTRANSFER => true,CURLOPT_ENCODING => "",CURLOPT_MAXREDIRS => 10,CURLOPT_TIMEOUT => 30,CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,CURLOPT_CUSTOMREQUEST => "POST",CURLOPT_POSTFIELDS => "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"file\"; filename=\"{$file}\"\r\nContent-Type: image/jpeg\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"type\"\r\n\r\n{$type}\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--",CURLOPT_HTTPHEADER => array(
"authorization: Basic {$auth}","cache-control: no-cache","content-type: multipart/form-data;",),));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
throw "cURL Error #:" . $err;
} else {
echo $response;
}
}
我如何将文件发送到外部api?
解决方法
我用Guzzle解决了这个问题:
private function sendFile($file,$sellerid,$type)
{
$url = "api";
$auth = 'XXXX';
$client = new Client();
$response = $client->request('POST',$url,[
'multipart' => [
[
'name' => 'category','contents' => $type
],[
'name' => 'file','contents' => fopen($file,'r'),'headers' => ['Content-Type' => 'image/jpeg']
],],'headers' => [
'Authorization' => "Basic {$auth}"
],]);
return $response->getBody();
}
,
要使其仅与CURL一起使用,请先使用CURLFile并将结果与您的post参数一起传递:
<?php
// Create a cURL handle
$ch = curl_init('http://example.com/upload.php');
// Create a CURLFile object
$cfile = new CURLFile('cats.jpg','image/jpeg','test_name');
// Assign POST data
$data = array('test_file' => $cfile);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
// Execute the handle
curl_exec($ch);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。