yii2服务器间文件传输,YII2框架实现表单中上传单个文件的方法示例

本文详细介绍了在Yii2框架下如何实现在表单中上传单个文件,包括创建数据表、表单页面代码、模型类和控制器代码。通过示例代码,展示了如何处理上传的图像文件并将其保存到服务器,以及如何将数据和文件一起提交到数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文实例讲述了YII2框架实现表单中上传单个文件的方法。分享给大家供大家参考,具体如下:

有些时候我们提交的表单中含有文件。怎么样让表单里的数据和文件一起提交。

我的数据表tb_user内容如下:

CREATE TABLE `tb_user` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',

`name` varchar(32) DEFAULT '' COMMENT '用户名',

`pwd` varchar(64) DEFAULT '' COMMENT '密码',

`head_img` varchar(256) DEFAULT '' COMMENT '图像',

`sex` tinyint(1) DEFAULT '0' COMMENT '性别(0:男,1:女)',

`age` tinyint(3) DEFAULT '0' COMMENT '年龄',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

表单页面代码如下(至于为什么没有用ActiveForm来创建,这个就不解释了):

use yii\helpers\Url;

?>

表单提交

姓名:

密码:

性别:男

年龄:

头像:

模型类代码如下:

namespace app\models;

use yii\db\ActiveRecord;

use yii\web\UploadedFile;

class MyUser extends ActiveRecord

{

//注意这里的上传路径是相对你入口文件

const UPLOAD_PAHT = 'uploads/';

//返回你要操作的数据表名

public static function tableName()

{

return '{{%user}}';

}

//设置规则,验证表单数据

public function rules()

{

return [

['name', 'required', 'message' => '请填写用户名'],

['pwd', 'string', 'length' => [6, 12], 'message' => '密码6-12位'],

['sex', 'in', 'range' => [0, 1], 'message' => '正确选择性别'],

['age', 'integer', 'min' => 1, 'max' => 120, 'message' => '正确填写年龄'],

['head_img', 'image', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024 * 1024 * 1024, 'message' => '请上传头像'],

];

}

//上传头像

public function uploadHeadImg()

{

//'head_img'这个字符串必须跟你表单中file控件的name字段相同

$head_img = UploadedFile::getInstanceByName('head_img');

if (!empty($head_img)) {

$filePath = self::UPLOAD_PAHT . date('Ymd') . '/';

//判断文件上传路径,如果不存在,则创建

if (!file_exists($filePath)) {

@mkdir($filePath, 0777, true);

@chmod($filePath, 0777);

}

//文件名,我们通过md5文件名加上扩展名

$fileName = md5($head_img->baseName) . '.' . $head_img->extension;

$file = $filePath . $fileName;

//保存文件到我们的服务器上

$head_img->saveAs($file);

//返回服务器上的文件地址

return $file;

} else {

return false;

}

}

}

控制器代码如下:

namespace app\controllers;

use YII;

use yii\web\Controller;

class IndexController extends Controller

{

public function actionIndex()

{

if (YII::$app->request->isPost) {

$user = new \app\models\MyUser();

//把POST过来的数据加载到user对象

$data = YII::$app->request->post();

//注意第二个参数设为'',默认YII的ActiveForm创建的表单元素会加上下标

$user->load($data, '');

if ($user->validate()) {

$user->pwd = YII::$app->security->generatePasswordHash($user->pwd);

$user->head_img = $user->uploadHeadImg();

//这里保存时设为false不验证,因为pwd加密了

$user->save(false);

} else {

var_dump($user->errors);

}

} else {

return $this->renderPartial('index');

}

}

}

这样我们就可以通过表单上传图像了。

8d2b341989cdcc100aab0bdfc0139854.png

fbf75374e2f12ac80ec0f098fc2f08fc.png

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值