ThinkPHP3.0完全开发手册                                           

 

17.3.4          文件上传

文件上传仍然使用UploadFile扩展类库上传文件,使用方法不变。同样的代码在本地运行时将会上传到指定的目录,在SAE上运行时就会自动使用Storage服务,将文件上传到指定的Storage中。首先你需要在SAE平台上创建一个Storagedomain用于存放上传的文件:

http://sae.sina.com.cn/?m=storage

这里可以建立多个domain。而我们的文件会上传到哪个domain,是由上传路径的第一个目录名称决定的。如:

$upload->savePath =  './Public/Uploads/';

会上传到名为Publicdomain。你也不用在这个domain下创建Uploads文件夹,SAEStorage服务会为你自动创建。

图片地址的问题:

我们使用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删除文件。SAEThinkPHP新增sae_unlink函数实现兼容。如:

sae_unlink('./Public/Uploads/xxx.jpg');

在本地运行时,会删除Public/Uploads文件夹下的图片。而在SAE上运行时,会删除domainPublicStorage中的图片。此函数会删除哪个domian的文件也是由路径的第一个目录名称决定的。


站长教学网 免责声明