上传文件到SAE Storage

这几天寻思用SAE做一个APP的后台,需要存储图片。SAE禁用了本地文件存储,但是提供了Storage进行持久化操作。对PHP和SAE都不熟,好不容易才在网上的资料中弄成功,做个记号:

第一步,先做一个简单的上传页面,只有一个文件选择按钮和一个提交按钮。

<html xmlns=http://www.w3.org/1999/xhtml>
	<meta http-equiv=Content-Type content="text/html;charset=utf-8">
	<meta http-equiv=X-UA-Compatible content=IE=EmulateIE7>
	<head>
		<title>百思哥资料管理页面</title>
	</head>
	<body>
		<div>
			<form enctype="multipart/form-data" action="upload.php" method="POST">
				<p>图&nbsp;&nbsp;&nbsp;&nbsp;片:<input name="image" type="file"/></p>
				<p><input type="submit" value="提交资料"/></p>
			</form>
		</div>
	</body>
</html>

 

第二步,在SAE的Storage中创建一个domain,最多可以创建10个domain,同一个应用可以创建最多5个domain。

第三步,编写PHP代码:

<?php
	$domain="baisige";//域
	$path="picture";//上传目录
	$type="png|jpg|gif";//文件类型
	$name="image";//表单名称
	$save_name;//保存文件名

	$basename=basename($_FILES[$name]["name"]);//原始文件名
	$extension=pathinfo($basename,PATHINFO_EXTENSION);//拓展名
	$data=explode("|",trim(strtolower($type)));//允许的上传类型转为数组
	if(in_array($extension,$data)){
		$upload_path=$_FILES[$name]["tmp_name"];
		$content=file_get_contents($upload_path);
		$temp=new SaeStorage();
		if($save_name=="")
		{
			$filename=$path."/".$basename;
		}//原名称保存
		else{
			$filename=$path."/".$save_name.".".$extension;
		}//按传入的名称保存

		$temp->write($domain,$filename,$content);//写入文件
		$url=$temp->getUrl($domain,$filename);//获取地址

		echo "<p><a href='".$url."'>image:</a>".$filename."</p>";
	}
	else{
		echo "<p>Upload file error!</p>";
	}
?>

 

需要 注意的地方: 

$domain="baisige";//域

 一定要和Storage里创建的domain名字相同,不然肯定失败,相当于文件路径。

网上有很多例子都使用了move_uploaded_file这个函数,会有警告信息出来。论坛上说还是会传送成功,不过建议直接使用临时文件:

$upload_path=$_FILES[$name]["tmp_name"];

 

标签: , ,
文章分类 Linux服务器开发

发表评论