Amazon S3 在生产中工作但不在本地主机上
Amazon S3 working in production but not from localhost
我无法从本地主机上传到我的 s3 存储桶,尽管它在生产环境中运行良好。上传过程中没有发现错误,但文件从未出现(既不是 pdf 也不是图像)。我没有阻止 public 访问(这似乎是大多数人的问题)。
我看到这里的一个人通过在 php 设置中打开 allow_url_fopen 解决了他们的问题。我的已经开机了。
编辑:我应该注意到我有一个 python 脚本,我从 Windows 运行 使用了桶,没有任何问题。这让我觉得它与我的 WAMP 服务器设置有关,但我的 php 和 apache 日志都没有显示任何内容,而且设置看起来很好。
还有其他想法吗?
require_once '../../includes/aws/aws-autoloader.php';
$msg = "";
if( isset($_POST['fileUpload']) ) {
$fileUpload = $_POST['fileUpload'];
$dirPath = "drives/nota_simple/projects/";
$pdf_parts = explode(";base64,", $fileUpload["pdf"]);
$pdf_base64 = $pdf_parts[1];
$s3 = new Aws\S3\S3Client([
'region' => 'eu-west-1',
'version' => '2006-03-01',
'credentials' => [
'key' => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
'secret' => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
]
]);
$projectFolder = utf8_decode(filter_var($fileUpload['fileProject'], FILTER_SANITIZE_STRING));
$dirPath .= $projectFolder;
$dirPath .= '/' . $fileUpload['fileIdTask'];
$id_image = [taken from DB]
$key = $dirPath .'/'.$id_image.'.'.$fileUpload['fileExt'];
try { // Guardamos nota_simple
$result = $s3->putObject([
'Bucket' => 'BUCKET_NAME',
'Key' => $key,
'Body' => base64_decode($pdf_base64),
'ContentType' => 'application/' . $fileUpload['fileExt'],
'ACL' => 'public-read'
]);
}
catch(S3Exception $e) {
echo $e->getMessage() . "\n";
$msg = "Fallo al subir nota_simple: " . $e->getMessage();
$response = array("error" => $msg);
}
$response = array("success" => "Guardado con suceso.");
问题出在我的本地主机服务器设置中:
AWS HTTP error: cURL error 77: error setting certificate verify locations: CAfile: C:/wamp64/bin/php7.0.33/extras/ssl/cacert.pem
这不是正确的路径。
我将正确的路径添加到 php.ini(如下所示)并重新启动了服务器。现在可以使用了!
curl.cainfo="c:/wamp64/bin/php/php7.0.33/extras/ssl/cacert.pem"
openssl.cafile="c:/wamp64/bin/php/php7.0.33/extras/ssl/cacert.pem"
我无法从本地主机上传到我的 s3 存储桶,尽管它在生产环境中运行良好。上传过程中没有发现错误,但文件从未出现(既不是 pdf 也不是图像)。我没有阻止 public 访问(这似乎是大多数人的问题)。
我看到这里的一个人通过在 php 设置中打开 allow_url_fopen 解决了他们的问题。我的已经开机了。
编辑:我应该注意到我有一个 python 脚本,我从 Windows 运行 使用了桶,没有任何问题。这让我觉得它与我的 WAMP 服务器设置有关,但我的 php 和 apache 日志都没有显示任何内容,而且设置看起来很好。
还有其他想法吗?
require_once '../../includes/aws/aws-autoloader.php';
$msg = "";
if( isset($_POST['fileUpload']) ) {
$fileUpload = $_POST['fileUpload'];
$dirPath = "drives/nota_simple/projects/";
$pdf_parts = explode(";base64,", $fileUpload["pdf"]);
$pdf_base64 = $pdf_parts[1];
$s3 = new Aws\S3\S3Client([
'region' => 'eu-west-1',
'version' => '2006-03-01',
'credentials' => [
'key' => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
'secret' => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
]
]);
$projectFolder = utf8_decode(filter_var($fileUpload['fileProject'], FILTER_SANITIZE_STRING));
$dirPath .= $projectFolder;
$dirPath .= '/' . $fileUpload['fileIdTask'];
$id_image = [taken from DB]
$key = $dirPath .'/'.$id_image.'.'.$fileUpload['fileExt'];
try { // Guardamos nota_simple
$result = $s3->putObject([
'Bucket' => 'BUCKET_NAME',
'Key' => $key,
'Body' => base64_decode($pdf_base64),
'ContentType' => 'application/' . $fileUpload['fileExt'],
'ACL' => 'public-read'
]);
}
catch(S3Exception $e) {
echo $e->getMessage() . "\n";
$msg = "Fallo al subir nota_simple: " . $e->getMessage();
$response = array("error" => $msg);
}
$response = array("success" => "Guardado con suceso.");
问题出在我的本地主机服务器设置中:
AWS HTTP error: cURL error 77: error setting certificate verify locations: CAfile: C:/wamp64/bin/php7.0.33/extras/ssl/cacert.pem
这不是正确的路径。
我将正确的路径添加到 php.ini(如下所示)并重新启动了服务器。现在可以使用了!
curl.cainfo="c:/wamp64/bin/php/php7.0.33/extras/ssl/cacert.pem" openssl.cafile="c:/wamp64/bin/php/php7.0.33/extras/ssl/cacert.pem"