1. YII框架中的文件上傳功能怎麼實現求一個最簡單的代碼!
文件上傳思路都是一樣的 都是獲取上傳文件,判斷類型,大小等等,一系列檢查通過後就可以上傳啦,php也有相應的上傳函數,yii則更加模塊化啦!具體操作下面我提供一個上傳圖片的列子
Model
classXxxxextendsCActiveRecord
{
public$image;
//...otherattributes
publicfunctionrules()
{
returnarray(
array('image','file','types'=>'jpg,gif,png'),//驗證上傳文件類型
);
}
}
View
<?phpechoCHtml::form('','post',array('enctype'=>'multipart/form-data'));?>
...
<?phpechoCHtml::activeFileField($model,'image');?>
...
<?phpechoCHtml::endForm();?>
Controller
{
publicfunctionactionCreate()
{
$model=newItem;
if(isset($_POST['Item']))
{
$model->attributes=$_POST['Item'];
//這里保存圖片名稱到資料庫
$model->image=CUploadedFile::getInstance($model,'image');
if($model->save())
{
$model->image->saveAs('path/to/localFile');//設置上傳路徑
//redirecttosuccesspage
}
}
$this->render('create',array('model'=>$model));
}
}
希望能幫到你!
2. yii上傳文件
沒有這個item 表 或者 你檢查一下是不是表前綴沒加
3. yii 上傳文件的時候報這樣的錯誤The second argument to () function cannot be a directory
你用savase的時候你沒有傳到文件 而是傳了個目錄
4. 在Yii中怎樣把excel表格上傳到資料庫中
1.網站中商品一多,肯定需要一鍵導入功能,有現在成的第三方插件類PHPExcel,可以直接網路搜索進行下載。
5. yii文件上傳出現錯誤
Item model對應的資料庫表item不存在
你看下你資料庫有沒有Item這個表?
6. yii 的CUpLoadedFile不支持壓縮文件嗎,上傳壓縮文件一直不成功。。。
Yii不限制文件類型,只能在rules裡面配置。你出錯,估計是上傳文件,保存文件的時候出的錯。看看debug信息。
7. Yii里文件上傳CUploadedFile::getInstance($model, "face"); 裡面的$model 是什麼,是資料庫表的類嗎
是你在controller中聲明的model層的一個對象,也可以簡單理解為資料庫表的類。Yii用它構建前台表單。face是model的一個欄位名。
8. yii 使用CUploadedFile上傳圖片,圖片能上傳,但是上傳的圖片是隨機的,和我需要上傳的圖片不一樣
毫無疑問,肯定是你寫錯了。
我簡略寫下他的用法,你看下。
$file = CUploadedFile::getInstanceByName('imgFile');//imgFile為前台表單名
$path=time().'.'.$file->extensionName;
$file->saveAs($path);//一定不要把保存的文件名弄成一樣的,默認是覆蓋的。
9. Yii2.0 里擴展webuploader的多文件上傳如何保存
如何實現一個:根據修改上傳地址, 而上傳到不同的地方也就是跨域上傳, 小弟如果其他伺服器有接收上傳的功能(或程序), 可以實現從伺服器上傳文件到這台,
10. yii2高級框架怎麼使用jquery file upload上傳插件
// 視圖文件
use kartik\file\FileInput;
<?php $form = ActiveForm::begin([
'options' => ['enctype'=>'multipart/form-data'],
]); ?>
<?php
echo $form->field($model, 'banner_url[]')->label('banner圖')->widget(FileInput::classname(), [
'options' => ['multiple' => true],
'pluginOptions' => [
// 需要預覽的文件格式
'previewFileType' => 'image',
// 預覽的文件
'initialPreview' => ['圖片1', '圖片2', '圖片3'],
// 需要展示的圖片設置,比如圖片的寬度等
'initialPreviewConfig' => ['width' => '120px'],
// 是否展示預覽圖
'initialPreviewAsData' => true,
// 非同步上傳的介面地址設置
'uploadUrl' => Url::toRoute(['/goods/async-image']),
// 非同步上傳需要攜帶的其他參數,比如商品id等
'uploadExtraData' => [
'goods_id' => $id,
],
'uploadAsync' => true,
// 最少上傳的文件個數限制
'minFileCount' => 1,
// 最多上傳的文件個數限制
'maxFileCount' => 10,
// 是否顯示移除按鈕,指input上面的移除按鈕,非具體圖片上的移除按鈕
'showRemove' => true,
// 是否顯示上傳按鈕,指input上面的上傳按鈕,非具體圖片上的上傳按鈕
'showUpload' => true,
//是否顯示[選擇]按鈕,指input上面的[選擇]按鈕,非具體圖片上的上傳按鈕
'showBrowse' => true,
// 展示圖片區域是否可點擊選擇多文件
'browseOnZoneClick' => true,
// 如果要設置具體圖片上的移除、上傳和展示按鈕,需要設置該選項
'fileActionSettings' => [
// 設置具體圖片的查看屬性為false,默認為true
'showZoom' => false,
// 設置具體圖片的上傳屬性為true,默認為true
'showUpload' => true,
// 設置具體圖片的移除屬性為true,默認為true
'showRemove' => true,
],
],
// 一些事件行為
'pluginEvents' => [
// 上傳成功後的回調方法,需要的可查看data後再做具體操作,一般不需要設置
"fileuploaded" => "function (event, data, id, index) {
console.log(data);
}",
],
]);
?>
<?php ActiveForm::end(); ?>
如上所述,基本上都是組件 FileInput的基本屬性和設置,我們這里也僅僅羅列了一些常用的屬性介紹,如有所需,可查看文檔看屬性的詳細說明。
按照如上所配置,我們預覽下效果圖
感覺上效果很是可以,在開始寫php代碼實現之前,我們先在controller中實現 initialPreview和 initialPreviewConfig的配置
假設上面的視圖文件是用戶展示商品圖片的詳情頁,當前controller是指渲染視圖文件的controller,則需要在controller中獲取商品關聯的圖片,用於展示或者說用於商品圖片的刪除\新增操作。
// 假設商品的圖片是 $relationBanners,$id是商品的id
// $relationBanners的數據結構如:
/**
* Array
*(
* [0] => Array
* (
* [id] => 1484314
* [goods_id] => 1173376
* [banner_url] => ./uploads/20160617/146612713857635322241f2.png
* )
*
*)
*/
$relationBanners = Banner::find()->where(['goods_id' => $id])->asArray()->all();
// 對商品banner圖進行處理
$p1 = $p2 = [];
if ($relationBanners) {
foreach ($relationBanners as $k => $v) {
$p1[$k] = $v['banner_url'];
$p2[$k] = [
'url' => Url::toRoute('/banner/delete'),
'key' => $v['id'],
];
}
}
$model = new Banner;
return $this->render('banner', [
'model' => $model,
'p1' => $p1,
'p2' => $p2,
'id' => $id
]);
你可以看到p1是圖片地址的集合,這里用於賦值給initialPreview
p2是一組url和key的集合,這里用於賦值給initialPreviewConfig
其中url是移除圖片的請求地址
key是每個圖片對應的id
此時我們視圖文件中的pluginOptions應該是這樣的
'pluginOptions' => [
// other code
'initialPreview' => $p1,
'initialPreviewConfig' => $p2,
// other code
],
注意設置initialPreviewAsData為true哦,不然等會創建圖片後,預覽圖不會顯示。
我們在一開始配置文件中配置了uploadUrl,該參數是非同步上傳的圖片地址。
現在看上傳界面應該是光禿禿的,我們選擇一張圖片後效果如上圖2所示,
需要提醒的是,每張小圖片上的上傳是上傳對應的小圖片,input框(右下角)的上傳和移除都是針對所有的圖片的操作,一張也是上傳,十張也是上傳,我們這里只對多圖上傳的操作做一個必要的說明。
圖片上傳的地址以及上傳需要的額外參數(如商品id)我們都准備好了,額外的參數配置項是uploadExtraData,具體見上面視圖文件中的配置。
接著我們看 /goods/async-image 非同步上傳的程序實現
public function actionAsyncImage ()
{
// 商品ID
$id = Yii::$app->request->post('goods_id');
$p1 = $p2 = [];
if (empty($_FILES['Banner']['name']) || empty($_FILES['Banner']['name']['banner_url']) || !$id) {
echo '{}';
return;
}
for ($i = 0; $i < count($_FILES['Banner']['name']['banner_url']); $i++) {
$url = '/banner/delete';
$imageUrl = ''; //調用圖片介面上傳後返回圖片地址
// 圖片入庫操作,此處不可以批量直接入庫,因為後面我們還要把key返回 便於圖片的刪除
$model = new Banner;
$model->goods_id = $id;
$model->banner_url = $imageUrl;
$key = 0;
if ($model->save(false)) {
$key = $model->id;
}
// $pathinfo = pathinfo($imageUrl);
// $caption = $pathinfo['basename'];
// $size = $_FILES['Banner']['size']['banner_url'][$i];
$p1[$i] = $imageUrl;
$p2[$i] = ['url' => $url, 'key' => $key];
}
echo json_encode([
'initialPreview' => $p1,
'initialPreviewConfig' => $p2,
'append' => true,
]);
return;
}
到此,單圖和多圖上傳的工作我們也就完成了。
為了實現圖片的刪除效果,這里可以先上傳兩張圖片。你可以單張上傳也可以多張上傳。
上傳成功後你可以刷新當前頁面,因為一開始我們就在controller中實現了圖片的預覽工作,所以理應會展示我們已經上傳的兩張圖片。
按照我們的配置,現在的預覽圖應該是這樣的。
不說廢話,我們看圖片刪除的程序(/banner/delete)實現
public function actionDelete ()
{
if ($id = Yii::$app->request->post('key')) {
$model = $this->findModel($id);
$model->delete();
}
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return ['success' => true];
}