我尝试在将文件上传到AWS S3后取消链接,但我一直收到Permission denied错误。如果我删除代码部分将其上传到S3,那么它的工作原理。此外,如果我硬编码我之前上传的文件,unlink将删除该文件。一旦上传,我无法删除当前文件。
if(isset($_FILES['file'])){
//Get File
$file = $_FILES['file'];
$name = $file['name'];
$tmp_name = $file['tmp_name'];
//Get extension
$ext = explode('.', $name);
$ext = strtolower(end($ext));
//create unique name for file
$key = md5(uniqid());
//create temp
$temp_file_name = "{$key}.{$ext}";
$temp_file_path = "uploads/{$temp_file_name}";
//move to local folder
move_uploaded_file($tmp_name, $temp_file_path);
// upload to s3
try{
$s3->putObject([
'Bucket' => $config['s3']['bucket'],
'Key' => "uploads/{$name}",
'Body' => fopen($temp_file_path, 'rb'),
'ACL' => 'public-read'
]);
} catch (S3Exception $e){
die("There was some type of uploading issue " . $e->getMessage());
}
unlink($temp_file_path);
}
这是与此处发布的类似问题:https://docs.oracle.com/javase/8/docs/api/java/lang/String.html 这家伙说他通过将nginx服务器部署移动到CentOS来解决这个问题 这是我第一次使用AWS S3而无法找到他在说什么。一位朋友毫无困难地运行了相同的代码,所以我不确定是什么问题。有完整的文件访问权限可以运行,并且可以取消链接以前的文件,我知道这不是问题。
任何帮助将不胜感激。 谢谢
答案 0 :(得分:0)
原来我需要使用fclose()。
$body = fopen($temp_file_path, 'rb');
然后:
$s3->putObject([
'Bucket' => $config['s3']['bucket'],
'Key' => "uploads/{$name}",
'Body' => $body,
'ACL' => 'public-read'
]);
之后:
fclose($body);
unlink($temp_file_path);