自从上次把百度的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,增加更多自定义功能
必应桌面更好的集成facebook,增加更多自定义功能

android版微信5.0终于让我内测了
android版微信5.0终于让我内测了

500px官方终于支持Windows Phone平台了
500px官方终于支持Windows Phone平台了

FCC调查手机解锁禁令
FCC调查手机解锁禁令

将excel里面的数据导入mysql
将excel里面的数据导入mysql

相关文章

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

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

Spill将其“同情引擎”扩展至高中生和研究生
Spill将其“同情引擎”扩展至高中生和研究生

为什么网页游戏就只能靠美女广告引诱
为什么网页游戏就只能靠美女广告引诱

今天道招网重新用起了以前的纳奇广告联盟
今天道招网重新用起了以前的纳奇广告联盟

engadget发布上周android系统更新摘要
engadget发布上周android系统更新摘要

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