SAE为了安全禁止了本地IO操作(SAE虽然禁止了IO写操作,但是并没有禁止fwrite,file_put_contents等写操作函数),使得上传文件等操作不能使用我们平时习惯用的方法,但也给出了很好的解决办法。
首先要在storage服务管理中新建一个domain,用来做文件存储的服务器,代码中使用的是名为upload的domain
<!--upload.html-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SAE Upload Files Example</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>
<?php
//upload.php
date_default_timezone_set('Asia/Shanghai');
if (isset($_POST['submit'])) {
if ($_FILES["file"]["error"] > 0) {
echo "An error has occured: " . $_FILES["file"]["error"];
} else {
$upload_time = date("H-i-s");
$file_name = $_FILES["file"]["name"];
$sub_fix = strrpos($file_name,'.');
$save_name = $upload_time.substr($file_name,$sub_fix);
//组合成文件在storage某域名下的完整保存路径
$save_path = date('Ymd').'/'.$save_name;
$tmp_name = $_FILES['file']['tmp_name'];
$storage = new SaeStorage();
//使用域名为upload的storage服务
$result = $storage->upload("upload",$save_path, $tmp_name);
//获取此域名下存储文件的url访问路径
$pic_url = $storage->getUrl("upload",$save_path);
if (!$result) {
echo "文件上传失败!";
} else {
echo "<img src=".$pic_url." />";
}
}
} else {
echo "<script type='text/javascript'>window.location.href='upload.html'</script>";
}
?>