求助需求: 不上传文件,只获取文件本地路径 [ 新手入门 ]
背景: 上传文件到远程服务器 需求:
- 只允许上传指定类型的文件
- 文件不上传到本地服务器
- 使用curl上传到远程服务器
Model
<?php
/**
* @property string $image
* the uri of the image on remote server
*/
class User extends CActiveRecord
{
public function rules()
{
return array(
array('image', 'file', 'types'=>'jpg, gif, png'),
}
}
View
<div class="row">
<?php echo $form->labelEx($model,'image'); ?>
<?php echo CHtml::ActiveFileField($model,'image'); ?>
<?php echo $form->error($model,'image'); ?>
</div>
Controller
public function actionCreate()
{
$model=new User;
$result = array();
if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];
$img = CUploadedFile::getInstance($model, 'image');
if( is_object($img) && get_class($img) === 'CUploadedFile' ){
$result = put($img->tempName, $img->name);
$model->image = $result['uri'];
}
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}
$this->render('create',array(
'model'=>$model,
));
}
function put($path, $filename){
$postField = file_get_contents((realpath($path)));
$process = curl_init($this->uri.$filename);
curl_setopt($process, CURLOPT_POST, 1);
curl_setopt($process, CURLOPT_POSTFIELDS, $postField);
curl_setopt($process, CURLOPT_USERPWD, $this->username.':'.$this->userpass);
curl_setopt($process, CURLOPT_HTTPHEADER, array('Expect:', "Mkdir:true"));
curl_setopt($process, CURLOPT_HEADER, 0);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);
curl_exec($process);
curl_getinfo($process, CURLINFO_HTTP_CODE);
curl_close($process);
return $this->uri.$filename;
}
如果是上面的代码,那么文件就会在没有validation的情况下先上传的了,那么是不是需要before save validate,重新看手册,发现validate() method - Performs the validation,只需要修改代码为以下就okey了。
if($model->validate()){
$img = CUploadedFile::getInstance($model, 'image');
if( is_object($img) && get_class($img) === 'CUploadedFile' ){
$result =put($img->tempName, $img->name);
$model->image = $result['uri'];
}
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}
还有一个问题,如何不给服务器上传临时文件,而是直接将本地文件上传到远程服务器?谢谢,如果有更好的解决办法。
共 2 条回复
Shawn
注册时间:2011-12-17
最后登录:2013-09-23
在线时长:0小时0分
最后登录:2013-09-23
在线时长:0小时0分
- 粉丝0
- 金钱35
- 威望0
- 积分35