【发布时间】:2022-06-30 18:20:37
【问题描述】:
所以我有一个接受用户图像的 html 表单。
<form enctype="multipart/form-data" method="POST" action="call-api.php">
<input type="file" id="myFile" name="image" class="btn btn-default">
<input type="submit" name="upload" class="btn btn-default">
</form>
然后图像被发送到使用 S3 作为代理的 AWS API Gateway 并将图像上传到 S3。我正在使用 PHP curl 进行 REST API 调用:
<?php
if (isset($_FILES['image']['tmp_name'])) {
//create a handler for curl function
$curl = curl_init(); //initialzie cURL session
//The CURLFile class
$cfile = new CURLFile($_FILES['image']['tmp_name'], $_FILES['image']['type'], $_FILES['image']['name']);
//use array to post data to different server or within localhost
$data = array("myimage" => $cfile);
curl_setopt($curl, CURLOPT_URL, 'https://xxxxxx.execute-api.us-east-1.amazonaws.com/v1/test57827/'.$_FILES['image']['name']);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
//assign execute curl to a response variable
$result = curl_exec($curl);
?>
此代码的问题在于它在 S3 中上传了一个名为 $_FILES['image']['name'] 的文件,但该文件不是图像,因为从 S3 下载该文件后,我无法在普通图像预览程序中打开它并出现错误“文件格式不被识别”
但是当我从终端使用 curl 命令调用我的 api 时,图像会在 S3 中上传,因为当我从 S3 下载它时,我可以在普通图像预览程序中打开它。
curl --request POST -H "Content-Type: */*" --data-binary "@image.png" https://xxxxxxxx.execute-api.us-east-1.amazonaws.com/v1/test57827/myfile.jpeg
我尝试了多个版本的 php 代码,但没有一个能够以正确的方式上传图像。我不想使用 AWS 开发工具包。任何有关 php curl 的指导将不胜感激。
【问题讨论】:
标签: php amazon-web-services forms amazon-s3 curl