自从上次把百度的bae里面的应用删除了,再次申请时收到提示"BAE资源不足,正在扩容中,请等候下一批"就很郁闷,然后转到新浪的sae了。查看其api的第一件是就是看看它支持如何上传图片,因为这个功能对我来说很重要,如果提供的方式不适合我,我也就没有必要再用了。
看了看sae给出的示例代码。

第一种、通过利用表单上传,这种适用于前台,上用户点击上传。
做一个uplaod.html,代码如下:
[code lang="php"]
<form action="upload.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
[/code]
sae上传图片
upload.php的代码如下:
[code lang="php"]
<?php
$s = new SaeStorage();
if ($_FILES["file"]["error"] > 0){
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}else{
if( $s->upload( "4wp" , "test.jpg" , $_FILES["file"]["tmp_name"]) ){ //4wp是sae里面的bucket,test.jpg是最后保存的文件名
echo "上传成功";
}else{
echo "上传失败";
}
}
?>
[/code]
但是我们经常需要将远程的图片上传到sae的bucket里面这么办?新浪给出的api也没有这个功能啊。我们只有变通一下了,先将远程图片下载到本地,再将它上传至bucket。如果网友有更好的办法,请不吝赐教。

第二种、远程图片上传
因为新浪没有给出直接上传远程图片的api,但是给出了另外的解决方案。我们通过获取文件的二进制数据来达到目的。新浪允许我们用file_put_contents,不能用fopen之类的。
[code lang="php"]
<?php
$s = new SaeStorage();
ob_start();
readfile("http://img.baidu.com/img/baike/logo-baike.png");
$img = ob_get_contents();
ob_end_clean();
$size = strlen($img);
file_put_contents(SAE_TMP_PATH .'/bd.jpg' , $img );

if( $s->upload( "4wp" , "test.jpg" ,SAE_TMP_PATH .'/bd.jpg') ){
echo "上传成功";
}else{
echo "上传失败";
}
[/code]

分类: SAE

发表评论