YII2.0的文件上传, 并把文件名称重新编译

/**
*@Action 文件上传示例
*@这里我们演示的是一个YII2.0的文件上传, 并把文件名称重新编译
*@我们上传的是一个叫 photo 的jpg和png格式的文件

*/

Controller 控制器

<?php
namespace frontend\controllers;

use yii\web\UploadedFile;	#载入文件上传类
use frontend\models\UploadFile;	#引入我们自己的文件上传处理用的model

class ThumbController extends \yii\web\Controller
{
	/**
	*@Action 文件上传示例
	*@这里我们演示的是一个YII2.0的文件上传, 并把文件名称重新编译
	*@我们上传的是一个叫	photo 的jpg和png格式的文件
	*/
    public function actionIndex()
    {
		/**
		*@注意:
		* 1. 如果控制器做了 validate 的验证那么 model 的上传方法就不要再做 validate 的验证了
		* 2. 注意上传的文件的name的命名(我在这里上传的是一个叫photo的文件)
		* 3. 如果要在控制器做 validate 的验证则要注意 :
		*-------------①.validate的验证必须放在调用model的上传方法之前
		*-------------②.我在这里给出一个示例
		*---------------------------------------------------------------
		*#		$model = new UploadForm();
        *#		if (\Yii::$app->request->isPost)
		*#		{
        *#			$model->photo = UploadedFile::getInstance($model, 'photo');
		*#			if($model->validate()  && $path=$model->upload())
		*#			{
		*#				echo $path;die;	//输出文件路径
		*#			}
		*#			else
		*#			{
		*#				var_dump($model->getErrors());die;
		*#			}
		*#		}
        *
		*/

		/**
		*@我在这里推荐一个简易的做法 ↓
		*/
		$model = new UploadFile();
		if (\Yii::$app->request->isPost)
		{
            $image = $model->photo = UploadedFile::getInstance($model, 'photo');
            if ($file_path = $model->upload($image))
			{
                echo $file_path;die;
                return;
            }
        }
		return $this->render('index',[
			'model' => $model
		]);
    }

Models模型层

<?php
namespace frontend\models;
use yii\base\Model;
use yii\web\UploadedFile; #载入文件上传类

class UploadFile extends Model{    

	public $photo;

	public function rules()
	{
		return [
            [['photo'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg','wrongExtension'=>'只能上传{extensions}类型文件!'],
        ];
	} 

	/**
	*@Action 文件上传
	*/
	public function upload()
	{
		if ($this->validate())
		{
			$rootPath = "uploads/";	//定义上传的根目录
			$ext = $this->photo->extension;	//获取文件的后缀(*格式*)
			$randName = time() . rand(1000, 9999) . "." . $ext;	//重新编译文件名称
            $path = abs(crc32($randName) % 500);	//编译第二层文件夹名称
            $rootPath = $rootPath . $path . "/";	//拼接
            if (!file_exists($path)){	//判断该目录是否存在
                mkdir($rootPath,true);
            }
            $re = $this->photo->saveAs($rootPath . $randName);		//调用内置封装类**执行上传
            if($re){
				return $rootPath . $randName;	//上传成功**返回文件的路径名称
			}else{
				return false;
			}
        }
		else
		{
            return false;
        }
	}
}

VIEWS视图层

<?php
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
    <?= $form->field($model, 'photo')->fileInput() ?>
    <button>Submit</button>
<?php ActiveForm::end() ?>
时间: 2024-08-01 08:45:13

YII2.0的文件上传, 并把文件名称重新编译的相关文章

AjaxFileUpload结合Struts2实现多文件上传(动态添加文件上传框)

上篇文章http://www.jb51.net/article/124489.htm介绍了ajaxfileupload实现多文件上传, 但只是固定的文件个数,如果需求不确定是多少文件 则我们就需要动态的添加文件上传框,以实现灵活性. 基于上篇基本框架是不变的,主要修改以下几个方面 1.jQuery实现动态添加删除文件上传框 2.获取文件上传框的ID 3.ajaxfileupload.js里将ID数组转换为需要的Object数组 依次解决上面问题 一.实现动态添加删除文件上传框 <body> &

PHP文件上传之多文件上传的实现思路_php实例

多文件上传的两种情况 ①使用多个name值 <input type="file" name="file1"> <input type="file" name="file2"> <input type="file" name="file3"> <input type="file" name="file4"&g

asp利用文件上传组件实现文件上传

<style>body,form,fieldset,input,textarea{margin:0;padding:0;}body{background:#f2f2f2;height:100%;font:12px tahoma,arial;color:#333;text-align:center;}</style> <body> <form name="form" method="post" action="upl

dfs-本地文件上传到hadoop文件夹时出错。各路求助大神。

问题描述 本地文件上传到hadoop文件夹时出错.各路求助大神. 把本地文件上传到hadoop的文件下,本地上传文件后面出现 COPYING on client 127.0.0.1.然后在hadoop文件夹下面没有文件.大神求助啊.. $ bin/hdfs dfs -put etc/hadoop input2 15/08/25 10:14:26 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your pl

SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)

  林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程免费下载 一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+standard.jar 整个相关的包如下: 整个工程目录如下: 二.配置web.xml和S

PHP实现文件上传和多文件上传_php技巧

在PHP程序开发中,文件上传是一个使用非常普遍的功能,也是PHP程序员的必备技能之一.值得高兴的是,在PHP中实现文件上传功能要比在Java.C#等语言中简单得多.下面我们结合具体的代码实例来详细介绍如何通过PHP实现文件上传和多文件上传功能. 要使用PHP实现文件上传功能,我们先来编写两个php文件:index.php和upload.php.其中,index.php页面用于提交文件上传的表单请求,upload.php页面用于接收上传的文件并进行相应处理. 首先,我们来编写一个简单的index.

asp 利用文件上传组件upload_5xsoft文件上传

我们是利用upload文件上传组件进行文件上传哦. <%Server.ScriptTimeOut=5000%> <!--#include file="conn.asp"--> <!--#include FILE="upload_5xsoft.inc"--> <html> <head> <title>文件上传</title> <link rel="stylesheet&

javaweb-struts1文件上传时获取文件域都顺序

问题描述 struts1文件上传时获取文件域都顺序 用ActionForm.getMultipartRequestHandler().getFileElements()获取页面文件域是按照什么样的顺序获取的,还是无序获取的?

java 缩略图-Java中如何实现文件上传同时将文件首页生成缩略图保存

问题描述 Java中如何实现文件上传同时将文件首页生成缩略图保存 Java中如何实现文件上传同时将文件首页生成缩略图保存: 设想是在Java中模拟打印,将第一页获取生成图片,但是不知道怎么做 解决方案 什么叫文件首页?如果只是生产缩略图,java图像api直接搞定 解决方案二: 可否发下源码!!1976910941@qq.com 谢谢