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

第一种、通过利用表单上传,这种适用于前台,上用户点击上传。
做一个uplaod.html,代码如下:

<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>

sae上传图片
upload.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 "上传失败";
	}
}
?>

但是我们经常需要将远程的图片上传到sae的bucket里面这么办?新浪给出的api也没有这个功能啊。我们只有变通一下了,先将远程图片下载到本地,再将它上传至bucket。如果网友有更好的办法,请不吝赐教。

第二种、远程图片上传
因为新浪没有给出直接上传远程图片的api,但是给出了另外的解决方案。我们通过获取文件的二进制数据来达到目的。新浪允许我们用file_put_contents,不能用fopen之类的。

<?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 "上传失败";
}

随机文章

在facebook上创建页面并给予唯一url
在facebook上创建页面并给予唯一url

继facebook后flickr也支持标签了
继facebook后flickr也支持标签了

求6块钱回家
求6块钱回家

浅析angular.identity
浅析angular.identity

OPPO A103手机意外丢失,买酷比E66送话费
OPPO A103手机意外丢失,买酷比E66送话费

华硕推送4.2更新至TF300,TF700用户得再等等
华硕推送4.2更新至TF300,TF700用户得再等等

相关文章

一行代码,轻松将浏览器变成临时编辑器
一行代码,轻松将浏览器变成临时编辑器

wordpress上传图片失败解决方案
wordpress上传图片失败解决方案

魔兽世界大脚插件也有时不给力啊
魔兽世界大脚插件也有时不给力啊

Eclipse不能自动编译java为class的解决办法
Eclipse不能自动编译java为class的解决办法

在facebook上创建页面并给予唯一url
在facebook上创建页面并给予唯一url

内容分享:道招
本文链接:新浪sae上传图片的方法
道招声明:除特别标注或作者不详外,本站所有文章均为原创,转载请注明。欢迎共同关注互联网!