yii2: 上传图片,生成目录
2024-08-30 03:01:46
1、单个文件上传
首先建立一个模型models/UploadForm.php,内容如下
namespace app\models; use yii\base\Model;
use yii\web\UploadedFile; /**
* UploadForm is the model behind the upload form.
*/
class UploadForm extends Model
{
/**
* @var UploadedFile file attribute
*/
public $file; /**
* @return array the validation rules.
*/
public function rules()
{
return [
[['file'], 'file'],
];
}
}
再建立一个视图文件,内容如下
<?php
use yii\widgets\ActiveForm;
?> <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?> <?= $form->field($model, 'file')->fileInput() ?> <button>Submit</button> <?php ActiveForm::end() ?>
最后建立控制器文件,内容如下
namespace app\controllers; use Yii;
use yii\web\Controller;
use app\models\UploadForm;
use yii\web\UploadedFile; class SiteController extends Controller
{
public function actionUpload()
{
$model = new UploadForm(); if (Yii::$app->request->isPost) {
$model->file = UploadedFile::getInstance($model, 'file'); if ($model->file && $model->validate()) {
$model->file->saveAs('uploads/' . $model->file->baseName . '.' . $model->file->extension);
}
} return $this->render('upload', ['model' => $model]);
}
}
注意这里我们没有用model->load(...),而是用了UploadedFile::getInstance(...)。区别是后者不会执行$model->validate(),所以需要手动的去执行$model->validate()来检验数据的合法性。如果检验通过了,上传的文件保存在uploads文件夹下,即web目录下的uploads里。
一些可选的配置选项
上传文件不能为空
public function rules()
{
return [
[['file'], 'file', 'skipOnEmpty' => false],
];
}
上传类型,不仅可以根据扩展名检验,还可以根据文件的内容进行检验
public function rules()
{
return [
[['file'], 'file', 'extensions' => 'jpg, png', 'mimeTypes' => 'image/jpeg, image/png',],
];
}
目录生成:
/**
* 上传图片
* @return string
*/
private function uploadPic()
{
//是否上传图片
//upload
$file_img = '';
$file_name = md5(time());
$path = 'uploads/'.date("Y").'/'.date("m").'/'.date('d').'/';
if (!file_exists($path)) {
$this->createDir($path);
}
if (Yii::$app->request->isPost) {
$model = new WexinUploadForm();
$model->file = UploadedFile::getInstance($model, 'file'); if ($model->file && $model->validate()) {
$back = $model->file->saveAs($path .$file_name. '.' . $model->file->extension);
if($back)
$file_img = $path .$file_name. '.' . $model->file->extension;
}
}
return $file_img;
} /**
* 递归:生成目录
*/
private function createDir($str)
{
$arr = explode('/', $str);
if(!empty($arr))
{
$path = '';
foreach($arr as $k=>$v)
{
$path .= $v.'/';
if (!file_exists($path)) {
mkdir($path, 0777);
chmod($path, 0777);
}
}
}
}
最新文章
- 移动端web开发
- 用shebang编写一个ssh自动登陆脚本
- Spring1:Spring简介、环境搭建、源码下载及导入MyEclipse
- SQL Server join介绍
- hdu 4738 Caocao&#39;s Bridges 图--桥的判断模板
- CF577B Modulo Sum 好题
- 关于Rational Functional Tester (RFT)的简单介绍
- 【Java】Java运行cmd命令直接导出.sql文件
- 『重构--改善既有代码的设计』读书笔记---Duplicate Observed Data
- 邮件发送 emailsend .net开发
- HDU 4731 Minimum palindrome 2013 ACM/ICPC 成都网络赛
- 关于tasklet的一点小小的解释
- BotVS开发基础—2.7 指标MA
- LINUX 笔记-vmstat命令
- ArcGIS API for JavaScript 4.2学习笔记[8] 2D与3D视图同步
- java IO(三):字符流
- 简述在ADO中使用接口的抽象数据提供程序以及ADO.NET数据提供程序工厂模型
- 写一个python 爬虫爬取百度电影并存入mysql中
- SimInfo获取(MCC, MNC, PLMN)
- CF833E Caramel Clouds