手机版

yii2.0集成阿里巴巴云oss上传单个文件

时间:2021-09-03 来源:互联网 编辑:宝哥软件园 浏览:

上一篇文章已经介绍了如何集成阿里巴巴云oss,本文主要介绍了上传文件到阿里巴巴云oss。

主要思想:首先把文件上传到服务器,然后把服务器里的文件传输到阿里巴巴云oss。成功后,文件信息将被写入数据库,如果失败,服务器中的文件将被删除。

主要步骤:

0介绍了oss的几个概念。

AccessKeyId==可以理解为访问阿里巴巴云oss的账号

AccessKeySecret==可以理解为访问阿里巴巴云oss的密码

Bucket==可以理解为文件在保存的根目录下

EndPoint==放在空格和ossfile之间,构成了访问文件的url路径,也是获取阿里巴巴云图的途径。

对象==你的文件传输到阿里巴巴云oss后的路径和名称是什么

看截图更容易理解:

1文件上传仍然涉及mvc。这一次,从view开始,主要展示了一个提交文件的表单。Aliyunoss.php法典如下:

?phpuse yii \ widgets \ ActiveForm?PHP $ form=activeform : begin([' options '=[' enctype '=' multipart/form-data '])?=$form-field($model,' files')-fileInput()?按钮提交/按钮?php ActiveForm:end()?2.接收控制器中的文件,并将它们交给模型进行处理。上传控制器的示例代码如下:

公共函数actionTestAliyun(){ $ model=new UploadForm();//实例化上传类if(yii :3360 $ app-request-is post){ $ model-files=uploadedfile 33603360 getinstance($ model,' files ');//使用UploadedFile的getInstance方法接收单个文件$ model-setscename(' upload ');//设置上传场景$ RES=$ model-uploadfile();//调用模型中的上传方法上传$ err=$ model-getErrors();//获取错误消息echo ' preprint _ r($ RES);//打印上传结果print _ r($ err);//打印错误信息,便于故障排除退出;}返回$ this-render(' aliyunos ',[' model '=$ model]);}3控制器将图片传输到模型文件UploadForm.php后,必须先将文件移动到服务器的上传目录,再移动到阿里巴巴云。代码如下:

?PHP/* * *由PHP Storm创建。*描述:阿里oss上传图片*作者:倪伟*日期: 2016/11/17 0017 *时间3360 11:34 */命名空间app \机型;使用Yii使用yii \ base \ Exception使用yii \ base \ Model类UploadForm扩展了Model { public $文件;//用于保存文件的公共函数场景(){返回['upload'=['files'],//添加上传场景];} public function rules(){ return[[' files '],' file ',' skipOnEmpty'=false,' extensions'='jpg,png,gif ',' mimeTypes'='image/jpeg,image/png,Image/gif ',' maxsize'=1024 * 1024 * 10,' maxfiles'=1,' on'=['upload'],//设置图片的验证规则];}/* * *将单个文件上传到阿里巴巴云* @返回布尔值上传成功*/公共函数uploadfile(){ $ RES[' error ']=1;if($ this-validate()){ $ uploadPath=dirname(dirname(_ _ FILE _ _))。/web/上传/';//获取上传路径if(!file _ exists($ uploadPath)){ @ mkdir($ uploadPath,0777,true);} $ ext=$ this-files-GetExtension();//获取文件扩展名$ randnums=$ this-getrandnums();//生成一个随机数来重命名文件$ imagename=date ('ymdhis ')。$ randnums。'.'。$ ext//重命名文件$ ossfile=' file/'。日期(' ymd ')。'/'.$ imagename//这是保存到阿里巴巴云oss的文件名和路径。如果只有一个文件名,它将被放在空间的根目录中。$filePath=$uploadPath。$ imageName//生成文件的绝对路径if($ this-files-save as($ file path)){//将文件上载到服务器$ file data[' filename ']=$ imagename;//准备图片信息保存到数据库$ file data[' file path ']=$ file path;//准备图片信息保存到数据库$ file data[' ossfile ']=$ ossfile;//准备图片信息保存到数据库$ file data[' userid ']=yii :3360 $ app-user-id;//准备图片信息,保存到数据库。这个字段是为了避免其他用户恶意删除别人的图片。$ file data[' upload time ']=time();//准备图片信息,保存到数据库。//以上这些代码无法复制,需要根据您项目的需要进行修改。反正目的就是记录上传文件的信息。//老板,我把这些代码移到这里了。我没有仔细阅读。出了问题可以扣我奖金_ $ trans=yii :3360 $ app-db-begin transaction();//打开事务重试{ $ save file=yii :3360 $ app-db-create command()-insert(' file ',$ file data)-execute();//将文件上传信息写入数据库$ newid=yii :3360 $ app-db-getlastsinstid();//获取要返回的新添加文件的id。

If ($savefile) {//如果数据库插入成功,$ OSS upload=yii :3360 $ app-aliyunos-upload($ OSS file,$ file path);//调用Aliyunoss组件中的上传方法,将文件上传到aliyuncial($ ossupload){//如果上传成功,$ RES[' error ']=0;//准备返回信息$ RES[' fileid ']=$ new id;//准备返回消息$ RES[' OSS file ']=$ OSS file;//准备返回消息$ trans-commit();//如果上传失败,提交事务} else {//unlink($ filePath);//删除服务器上的文件$ trans-RoLL();//事务回滚} } unlink($ FilePath);//无法插入数据库。删除服务器上的文件$ trans-RoLL();//事务回滚}捕获(异常$e) {//出现异常unlink($ filePath);//删除服务器上的文件$ trans-RoLL();//事务回滚}}}返回$ res//返回上传的信息}/* * *生成随机数* @返回字符串随机数*/受保护函数getrandnumbers(){ $ arr=array();while(count($ arr)10){ $ arr[]=rand(1,10);$ arr=array _ unique($ arr);} return inquide(',$ arr);}}如果报错,说没有上传文件,很可能是因为图片验证规则设置maxFiles大于1,所以直接改成1就可以了。

请注意,上面的代码会在本地测试环境中报告curl连接超时的错误,在服务器上运行没有问题。

免责声明:本人对复制本示例代码造成的损失不承担责任。

你要根据自己的项目修改!做好检测!

你要根据自己的项目修改!做好检测!

你要根据自己的项目修改!做好检测!

重要的事情说三遍。好吧,祝你成功。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:yii2.0集成阿里巴巴云oss上传单个文件是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。