参考阅读

storage是什么?

因为sae禁用了代码环境的本地读写,但是在网站运行的过程中,必定会出现文件的读写,附件保存问题,此时就该存取storage出场了,storage代替了常规的upload目录~

怎么在sae使用storage?

见下面的图示:

输入domain的名字,其他的建议不需要填写,特别是防盗链那块,对于不熟悉的人而言,设置可能导致storage内的资源无法访问,可以等彻底熟悉了storage的工作原理后再设置不迟:)我此处创建一个名字叫lazy的domain用于教学。

到此你就已经创建完了storage,

你可以在sae的管理面板就是上面图片中点击“管理” 管理storage中的文件,进行上传,批量上传,删除等一系列操作。

下文主要介绍从代码的角度使用storage,举一个具体的实例说明如何将用户上传的图片写到storage中。

初实storage

我们可以创建如下的脚本看看现在的storage

<?php
$stor = new SaeStorage();
$domain = 'lazy';//我刚创建的domain的名称
$filename = 'remote_file.txt';
$content = 'hello lazy';
$stor->write( $domain , $filename , $content );
echo($stor->read( $domain , $filename));//获取文件的内容
echo '<br>';
echo($stor->getUrl($domain,$filename));//获取文件的绝对地址
?>

运行可以得到以下的结果(http://lazydemo.sinaapp.com/storage/know_storage.php)

hello lazy
http://lazydemo-lazy.stor.sinaapp.com/remote_file.txt

经过了上面的例子相信大部分人都应该弄清楚了storage是什么了,那么下面再给一个实例讲解如果从form表单中直接上传文件写到storage中。

index.html

<html>
<title>Sae Storage demo</title>
<div>
<form id="pic_upload" action="recieve.php" method="POST" enctype="multipart/form-data" target="_self" name="pic_upload" action-type="form" node-type="form">
<input type="file" name="file" class="file"  id="imgfile" value="demo" />
<input type="submit" value="Upload" class="write_weibo" name="submit" />
</form>
</div>

recieve.php

<?php
$stor = new SaeStorage();
$domain = 'lazy';//我刚创建的domain的名称
$url = NULL;
if($_FILES["file"]["tmp_name"] != NULL)
{
$fileDataName = $_FILES["file"]["name"];
//添加图片上传到STORAGE
$dumpdata = file_get_contents($_FILES["file"]["tmp_name"]);
$dowLoadUrl = $stor->write($domain,$fileDataName,$dumpdata);//用write就行了
$url = $stor->getUrl($domain,$fileDataName);//如果上传图片的处理地址
echo "上传的文件:";
echo($url);
}
?>

试验地址:http://lazydemo.sinaapp.com/storage/

关于用wrapper(saestor://)操作storage

sae提供了wrapper来操作storage,这样方便file_get_contents等函数的使用,进一步降低了学习成本,下面我就用一个简单的例子讲叙如何使用saestor://来操作storage。见下面的实例:

<?php
file_put_contents('saestor://lazy/testwrapper.txt','hello wrapper');//写一个hello wrapper到testwrapper.txt文件中
$content = file_get_contents('saestor://lazy/testwrapper.txt');
var_dump($content);
?>

访问:http://lazydemo.sinaapp.com/storage/storage_wrapper.php可以看到得到的结果是:

string(13) "hello wrapper"

本次教程所有源码打包下载地址:

http://lazydemo.sinaapp.com/storage/storage.zip

Sina App Engine(SAE)入门教程(7)- Storage使用的更多相关文章

  1. Sina App Engine(SAE)入门教程(2)-Mysql使用

    如果你还没有SAE的账号,请在http://sae.sina.com.cn 注册新用户.具体的注册流程请参见:Sina App Engine(SAE)入门教程(1)在常规的环境下,我们可以通过http ...

  2. Sina App Engine(SAE)入门教程(8)- SaeFetchurl使用

    fetchurl是什么? FetchURL是SAE为开发者提供的分布式网页抓取服务,用来同步的抓取http页面,FetchURL针对国内的网络的做了优化,内部有调度系统,尽可能保证用户快速的抓取到目标 ...

  3. Sina App Engine(SAE)入门教程(3)-KVDB使用

    简介 因为传统关系型数据库在分布式环境下表现的扩展性不足等缺点,近年来NoSQL的概念渐渐成为业界关注的焦点,越来越多的技术人员也习惯于使用NoSQL数据库进行日常开发,SAE为了应对这种新需求,也进 ...

  4. Sina App Engine(SAE)入门教程(1)

    此教程只针对刚接触SAE的小白用户,资深码农.高手请绕道.首先还是一个经典的实例,hello sae. 创建应用 在注册完账号之后,需要到 http://sae.sina.com.cn/?m=myap ...

  5. Sina App Engine(SAE)入门教程(4)- SaeVCode(验证码服务)使用

    参考资料 SaeVCode api 文档 使用教程 所有的验证码原理都是生成一个vcode字符串,存到session中,和用户的输入进行比较判断,以下是一个使用验证码服务的完整实例: 首页index. ...

  6. Sina App Engine(SAE)入门教程(10)- Cron(定时任务)使用

    参考资料 SAE Cron说明文档 Cron能干什么? cron 可以定时的触发一个脚本,在sae上最大的频率是一分钟一次.你可以用其来完成自己需要的业务逻辑,例如定期的抓取某些网页完菜信息的采集,定 ...

  7. Sina App Engine(SAE)入门教程(9)- SaeMail(邮件)使用

    参考资料: SAE mail api 文档 怎么使用? 参见代码: <?php $mail = new SaeMail(); $f = new SaeFetchurl(); $img_data ...

  8. Sina App Engine(SAE)入门教程(6)- memcache使用

    Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等.简单的说就是将数据调用到内 ...

  9. Sina App Engine(SAE)入门教程(5)- SaeSegment(中文分词服务)使用

    分词能干什么? 提取一篇文章的关键字 检测特定的段落中有没有违禁词 智能机器人 …..尽你所想 开启SAE 分词服务 首先你需要在sae的管理面板开始分词服务后才能使用sae的服务.具体的开启操作: ...

随机推荐

  1. webpack使用webpack-dev-middleware进行热重载

    新手,刚开始学习webpack,想使用webdevserver,但定制性太差,于是研究了一下使用webpack-dev-middleware进行指定. 根据文档https://www.npmjs.co ...

  2. 关于CSS中的PX值(像素)

    场景: 人物:前端实习生「阿树」与 切图工程师「玉凤」事件:设计师出设计稿,前端实现页面 玉凤:树,设计稿发给你啦,差那么点像素,就叼死你┏(  ̄へ ̄)=☞阿树:~(>_<)~毛问题噶啦~ ...

  3. Js 和 PHP 中保留小数点后X位数的方法 toFixed、round、number_format、sprintf

    在 Javacript 中保留小数点后两位数的方法为 toFixed(2),其中的2为保留两位,写多少就保留多少了,满5进1. Javacript例子: var num = 24.54789523; ...

  4. 精美舒适的对话消息提示框--第三方开源--SweetAlertDialog

    SweetAlertDialog(sweet-alert-dialog)是一个套制作精美.动画效果出色生动的Android对话.消息提示框 SweetAlertDialog(sweet-alert-d ...

  5. Delphi XE5教程1:语言概述

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...

  6. ASP.NET中各种连接数据库的配置

    一.数据库连接语句 1.MSSQL数据库链接示例 <connectionStrings> <add name="Conn" connectionString=&q ...

  7. Oracle内存组件理论篇一

    目标 1.SGA结构 2.PGA结构 1.SGA Shared pool 1).共享池是对SQL.PL/SQL程序进行语法分析.编译.执行的内存区域. 在执行SELECT * FROM emp语句时, ...

  8. (菜鸟要飞系列)三,基于Asp.Net MVC5的后台管理系统(用户的增删改查功能)

    这些天被项目,考试整昏了头脑,没时间更新,我已经将这一部分全部做完了,现在把代码放上来,大家可以自己研究,有问题可以私聊,这里把图放上来 http://download.csdn.net/detail ...

  9. js 截取某个字符前面或者后面的字符串

    /* string 字符串; str 指定字符; split(),用于把一个字符串分割成字符串数组; split(str)[0],读取数组中索引为0的值(第一个值),所有数组索引默认从0开始; */ ...

  10. 一个Java对象到底占用多大内存

    在网上搜到了一篇博客讲的非常好,里面提供的这个类也非常实用: import java.lang.instrument.Instrumentation; import java.lang.reflect ...