ThinkPHP3.0完全开发手册
文件上传仍然使用UploadFile扩展类库上传文件,使用方法不变。同样的代码在本地运行时将会上传到指定的目录,在SAE上运行时就会自动使用Storage服务,将文件上传到指定的Storage中。首先你需要在SAE平台上创建一个Storage的domain用于存放上传的文件:
http://sae.sina.com.cn/?m=storage
这里可以建立多个domain。而我们的文件会上传到哪个domain,是由上传路径的第一个目录名称决定的。如:
$upload->savePath = './Public/Uploads/';
会上传到名为Public的domain。你也不用在这个domain下创建Uploads文件夹,SAE的Storage服务会为你自动创建。
图片地址的问题:
我们使用UploadFile类上传图片,在本地和在SAE下图片的浏览地址是不一样的。我们可以使用SAE专有配置,使程序在SAE上运行时能正常显示图片,例如, 我们定义一个__UPLOAD__ 变量。
在config.php中配置:
'__UPLOAD__'=>__ROOT__.'/Public/upload'
图片显示的代码:
<img src="__UPLOAD__/图片名称" />
我们在SAE专有配置Conf/config_sae.php文件中 定义如下代码:
<?php
$s=Think::instance('SaeStorage');
$url=$s->getUrl('Public','');
return array(
'TMPL_PARSE_STRING'=>array(
'__UPLOAD__'=>$url.'upload'
)
);
这样,在本地运行时__UPLOAD__ 会指向本地的Public目录,而在SAE上运行时__UPLOAD__ 会被替换为Storage的域名,从而让同样的代码,在本地能运行,在SAE下也能运行。
文件删除问题:
因为上传的文件在本地和SAE存放的地方不一样,所以我们不能直接用unlink删除文件。SAE版ThinkPHP新增sae_unlink函数实现兼容。如:
sae_unlink('./Public/Uploads/xxx.jpg');
在本地运行时,会删除Public/Uploads文件夹下的图片。而在SAE上运行时,会删除domain为Public的Storage中的图片。此函数会删除哪个domian的文件也是由路径的第一个目录名称决定的。