PDA

View Full Version : مشکل در آپلود فایل با ajax



alirezara
سه شنبه 26 اسفند 1393, 08:21 صبح
با سلام و خسته نباشید خدمت دوستان و اساتید گرامی

دوستان بنده قصد دارم برای آپلود فایل از ajax استفاده کنم. برای انجام این کار کد های زیر رو نوشتم. البته هنوز در کدهای زیر قصد ذخیره ی فایل آپلود شده را ندارم فقط می خوام بدونم اگه فایل آپلود شده در کنترلر به نام فایل دسترسی پیدا کنم. از دوستان عزیزم خواهشمندم راهنماییم کنید.

کد بخش ویو :



<div class="col-md-9 col-sm-8">
<div class="box box-primary">
<div class="box-body pad table-responsive">
<?php

$form=$this->beginWidget('CActiveForm', array(
'id'=>'users-form',
'htmlOptions'=>array('enctype'=>'multipart/form-data'),
'enableAjaxValidation'=>true,
'enableClientValidation'=>true
));

?>
<p style="direction:rtl;">
<?php echo CHtml::encode('تکمیل فیلد های * الزامی می باشد.'); ?>
</p>

<hr />


<?php echo ' *'.CHtml::encode($model->getAttributeLabel('firstName')); ?>
<div class="input-group">
<?php echo $form->textField($model,'firstName',array('maxlength'=>255,'class'=>'form-control','style'=>'direction:rtl;','tabindex'=>'1')); ?>
<span class="input-group-addon"><i class="fa fa-arrow-circle-left"></i></span>
</div>
<?php echo $form->error($model,'firstName',array('style'=>'color:#F00; direction:rtl;')); ?>

<br />

<?php echo ' *'.CHtml::encode($model->getAttributeLabel('lastName')); ?>
<div class="input-group">
<?php echo $form->textField($model,'lastName',array('maxlength'=>255,'class'=>'form-control','style'=>'direction:rtl;','tabindex'=>'2')); ?>
<span class="input-group-addon"><i class="fa fa-arrow-circle-left"></i></span>
</div>
<?php echo $form->error($model,'lastName',array('style'=>'color:#F00; direction:rtl;')); ?>

<br />

<?php echo ' *'.CHtml::encode($model->getAttributeLabel('username')); ?>
<div class="input-group">
<?php echo $form->textField($model,'username',array('maxlength'=>255,'class'=>'form-control','style'=>'direction:ltr; font-size:13px; font-family:Arial, Helvetica, sans-serif;','tabindex'=>'3')); ?>
<span class="input-group-addon"><i class="fa fa-user"></i></span>
</div>
<?php echo $form->error($model,'username',array('style'=>'color:#F00; direction:rtl;')); ?>

<br />
<div>
<div class="col-md-6 col-sm-6">

<?php echo ' *'.CHtml::encode($model->getAttributeLabel('password_repeat')); ?>
<div class="input-group">
<?php echo $form->passwordField($model,'password_repeat',array('maxl ength'=>255,'class'=>'form-control','style'=>'direction:ltr;font-size:15px;','tabindex'=>'5')); ?>
<span class="input-group-addon"><i class="fa fa-tags"></i></span>
</div>
<?php echo $form->error($model,'password_repeat',array('style'=>'color:#F00; direction:rtl;')); ?>

</div>
<div class="col-md-6 col-sm-6">

<?php echo ' *'.CHtml::encode($model->getAttributeLabel('password')); ?>
<div class="input-group">
<?php echo $form->passwordField($model,'password',array('maxlength'=>255,'class'=>'form-control','style'=>'direction:ltr;font-size:15px;','tabindex'=>'4')); ?>
<span class="input-group-addon"><i class="fa fa-tag"></i></span>
</div>
<?php echo $form->error($model,'password',array('style'=>'color:#F00; direction:rtl;')); ?>

</div>
</div>

<div style="margin-top:10%;">
<div class="col-md-6 col-sm-6">

<?php echo ' *'.CHtml::encode($model->getAttributeLabel('block')); ?>
<?php
echo $form->dropDownList(
$model,
'block',
$model->getTypeOptions(),
array(
'class'=>'form-control',
'style'=>'direction:rtl;font-size:15px;',
'tabindex'=>'7'
)
);
?>
<?php echo $form->error($model,'block',array('style'=>'color:#F00; direction:rtl;')); ?>

</div>
<div class="col-md-6 col-sm-6">

<?php echo ' *'.CHtml::encode($authAssignmentModel->getAttributeLabel('itemname')); ?>
<?php
echo $form->dropDownList(
$authAssignmentModel,
'itemname',
$authAssignmentModel->getTypeOptionsRoles(),
array(
'class'=>'form-control',
'style'=>'direction:rtl;font-size:15px;',
'tabindex'=>'6'
)
);
?>
<?php echo $form->error($authAssignmentModel,'itemname',array('style '=>'color:#F00; direction:rtl;')); ?>

</div>
</div>
<div style="margin-top:20%">
<hr />

<?php
echo CHtml::submitButton(
$model->isNewRecord ? CHtml::encode('ایجاد کاربر') : CHtml::encode('ذخیره ی اطلاعات'),
array('class'=>'btn btn-primary btn-flat','tabindex'=>'10')
);
?>
</div>
<?php $this->endWidget(); ?>

</div>
</div>
</div>
<div class="col-md-3 col-sm-4" style="direction:rtl;" align="center">


<script language="javascript">


function xmlhttpRequest()
{
var XMLHttpRequestObject=false;
try{
XMLHttpRequestObject=new ActiveXObject("MSXML2.XMLHTTP.5.0");
} catch(exception1){
try{
XMLHttpRequestObject=new ActiveXObject("MSXML2.XMLHTTP.4.0");
} catch(exception2){
try{
XMLHttpRequestObject=new ActiveXObject("MSXML2.XMLHTTP.3.0");
} catch(exception3){
try{
XMLHttpRequestObject=new ActiveXObject("MSXML2.XMLHTTP");
} catch(exception4){
try{
XMLHttpRequestObject=new ActiveXObject("Microsoft.XMLHTTP");
} catch(exception5){
XMLHttpRequestObject=false;
}
}
}
}
}

if(!XMLHttpRequestObject && window.XMLHttpRequest)
{
XMLHttpRequestObject = new XMLHttpRequest();
}
return XMLHttpRequestObject;
}

function uploadFile(patch,id)
{
var fd = new FormData();
fd.append("Users[avatar]", document.getElementById('avatar').files[0]);
var xhr = xmlhttpRequest();
if(xhr)
{
var obj=document.getElementById(id);
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
xhr.open("POST", patch);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.onreadystatechange=function()
{

if(xhr.readyState > 0 && xhr.readyState < 4)
{
obj.innerHTML=loadingmessage;
}

if(xhr.readyState==4 && xhr.status==200)
{
obj.innerHTML=xhr.responseText;
}

}
xhr.send(fd);
}
}

function uploadProgress(evt)
{
if (evt.lengthComputable)
{
var percentComplete = Math.round(evt.loaded * 100 / evt.total);
document.getElementById('progressNumber').innerHTM L = percentComplete.toString() + '%';
document.getElementById('prog').value = percentComplete;
}
else {
document.getElementById('progressNumber').innerHTM L = 'unable to compute';
}
}

function uploadComplete(evt)
{
alert('بارگزاری فایل با موفقیت انجام شد');
}

function uploadFailed(evt)
{
alert("بارگزاری فایل با شکست روبرو شد");
}

function uploadCanceled(evt)
{
alert("بارگزاری فایل متوقف شد");
}


</script>
<?php
$form=$this->beginWidget('CActiveForm', array(
'id'=>'form_upload_avatar',
'enableAjaxValidation' => FALSE,
'htmlOptions' => array('enctype' => 'multipart/form-data'),
));
?>
<div id="avatarId">
<img src="<?php echo Yii::app()->request->baseUrl; ?>/img/avatar/default/default-avatar.jpg" alt="default-avatar" />
</div>

<br />


<?php
echo $form->fileField(
$model,
'avatar',
array(
'id'=>'avatar',
'class'=>'text-align-left-dir-ltr',
'style'=>'border:#666 thin dashed;
font-family:Arial, Helvetica, sans-serif;
font-size:13px;
',
'tabindex'=>'8'
)
);
?>

<br />

<div id="progressNumber"></div>
<progress id="prog" min="0" max="100" ></progress>


<hr />

<?php
echo CHtml::htmlButton(
CHtml::encode('آپلود تصویر'),
array(
'onclick'=>"uploadFile('".Yii::app()->createUrl("users/upload")."','avatarId')",
'id'=> 'Post',
'class'=>'btn btn-primary btn-flat',
)
);
?>

<?php $this->endWidget(); ?>


</div>



کد بخش کنترولر :



public function actionUpload()
{


if(isset($_FILES['Users']))
echo 'a';
else
echo 'b';

}




دوستان ! در حال حاضر در div با ای دی avatarId حرف b نمایش داده میشه من فکر می کنم در انتقال فایل از فرم به کنترولر دچار مشکل شدم یعنی در کد :



var fd = new FormData();
fd.append("Users[avatar]", document.getElementById('avatar').files[0]);



به درستی عمل نکردم. ممنون میشم از دوستان که برای رفع مشکل کد به بنده کمک کنن.

با تشکر از همه ...

Muhammad-Ali
سه شنبه 26 اسفند 1393, 16:07 عصر
سلام، وقت نکردم کدت رو بخونم ولی شاید این بدردت بخوره:
http://www.yiiframework.com/doc/api/1.1/CUploadedFile

under22
چهارشنبه 27 اسفند 1393, 14:46 عصر
با سلام و خسته نباشید خدمت دوستان و اساتید گرامی

دوستان بنده قصد دارم برای آپلود فایل از ajax استفاده کنم. برای انجام این کار کد های زیر رو نوشتم. البته هنوز در کدهای زیر قصد ذخیره ی فایل آپلود شده را ندارم فقط می خوام بدونم اگه فایل آپلود شده در کنترلر به نام فایل دسترسی پیدا کنم. از دوستان عزیزم خواهشمندم راهنماییم کنید.

کد بخش ویو :



<div class="col-md-9 col-sm-8">
<div class="box box-primary">
<div class="box-body pad table-responsive">
<?php

$form=$this->beginWidget('CActiveForm', array(
'id'=>'users-form',
'htmlOptions'=>array('enctype'=>'multipart/form-data'),
'enableAjaxValidation'=>true,
'enableClientValidation'=>true
));

?>
<p style="direction:rtl;">
<?php echo CHtml::encode('تکمیل فیلد های * الزامی می باشد.'); ?>
</p>

<hr />


<?php echo ' *'.CHtml::encode($model->getAttributeLabel('firstName')); ?>
<div class="input-group">
<?php echo $form->textField($model,'firstName',array('maxlength'=>255,'class'=>'form-control','style'=>'direction:rtl;','tabindex'=>'1')); ?>
<span class="input-group-addon"><i class="fa fa-arrow-circle-left"></i></span>
</div>
<?php echo $form->error($model,'firstName',array('style'=>'color:#F00; direction:rtl;')); ?>

<br />

<?php echo ' *'.CHtml::encode($model->getAttributeLabel('lastName')); ?>
<div class="input-group">
<?php echo $form->textField($model,'lastName',array('maxlength'=>255,'class'=>'form-control','style'=>'direction:rtl;','tabindex'=>'2')); ?>
<span class="input-group-addon"><i class="fa fa-arrow-circle-left"></i></span>
</div>
<?php echo $form->error($model,'lastName',array('style'=>'color:#F00; direction:rtl;')); ?>

<br />

<?php echo ' *'.CHtml::encode($model->getAttributeLabel('username')); ?>
<div class="input-group">
<?php echo $form->textField($model,'username',array('maxlength'=>255,'class'=>'form-control','style'=>'direction:ltr; font-size:13px; font-family:Arial, Helvetica, sans-serif;','tabindex'=>'3')); ?>
<span class="input-group-addon"><i class="fa fa-user"></i></span>
</div>
<?php echo $form->error($model,'username',array('style'=>'color:#F00; direction:rtl;')); ?>

<br />
<div>
<div class="col-md-6 col-sm-6">

<?php echo ' *'.CHtml::encode($model->getAttributeLabel('password_repeat')); ?>
<div class="input-group">
<?php echo $form->passwordField($model,'password_repeat',array('maxl ength'=>255,'class'=>'form-control','style'=>'direction:ltr;font-size:15px;','tabindex'=>'5')); ?>
<span class="input-group-addon"><i class="fa fa-tags"></i></span>
</div>
<?php echo $form->error($model,'password_repeat',array('style'=>'color:#F00; direction:rtl;')); ?>

</div>
<div class="col-md-6 col-sm-6">

<?php echo ' *'.CHtml::encode($model->getAttributeLabel('password')); ?>
<div class="input-group">
<?php echo $form->passwordField($model,'password',array('maxlength'=>255,'class'=>'form-control','style'=>'direction:ltr;font-size:15px;','tabindex'=>'4')); ?>
<span class="input-group-addon"><i class="fa fa-tag"></i></span>
</div>
<?php echo $form->error($model,'password',array('style'=>'color:#F00; direction:rtl;')); ?>

</div>
</div>

<div style="margin-top:10%;">
<div class="col-md-6 col-sm-6">

<?php echo ' *'.CHtml::encode($model->getAttributeLabel('block')); ?>
<?php
echo $form->dropDownList(
$model,
'block',
$model->getTypeOptions(),
array(
'class'=>'form-control',
'style'=>'direction:rtl;font-size:15px;',
'tabindex'=>'7'
)
);
?>
<?php echo $form->error($model,'block',array('style'=>'color:#F00; direction:rtl;')); ?>

</div>
<div class="col-md-6 col-sm-6">

<?php echo ' *'.CHtml::encode($authAssignmentModel->getAttributeLabel('itemname')); ?>
<?php
echo $form->dropDownList(
$authAssignmentModel,
'itemname',
$authAssignmentModel->getTypeOptionsRoles(),
array(
'class'=>'form-control',
'style'=>'direction:rtl;font-size:15px;',
'tabindex'=>'6'
)
);
?>
<?php echo $form->error($authAssignmentModel,'itemname',array('style '=>'color:#F00; direction:rtl;')); ?>

</div>
</div>
<div style="margin-top:20%">
<hr />

<?php
echo CHtml::submitButton(
$model->isNewRecord ? CHtml::encode('ایجاد کاربر') : CHtml::encode('ذخیره ی اطلاعات'),
array('class'=>'btn btn-primary btn-flat','tabindex'=>'10')
);
?>
</div>
<?php $this->endWidget(); ?>

</div>
</div>
</div>
<div class="col-md-3 col-sm-4" style="direction:rtl;" align="center">


<script language="javascript">


function xmlhttpRequest()
{
var XMLHttpRequestObject=false;
try{
XMLHttpRequestObject=new ActiveXObject("MSXML2.XMLHTTP.5.0");
} catch(exception1){
try{
XMLHttpRequestObject=new ActiveXObject("MSXML2.XMLHTTP.4.0");
} catch(exception2){
try{
XMLHttpRequestObject=new ActiveXObject("MSXML2.XMLHTTP.3.0");
} catch(exception3){
try{
XMLHttpRequestObject=new ActiveXObject("MSXML2.XMLHTTP");
} catch(exception4){
try{
XMLHttpRequestObject=new ActiveXObject("Microsoft.XMLHTTP");
} catch(exception5){
XMLHttpRequestObject=false;
}
}
}
}
}

if(!XMLHttpRequestObject && window.XMLHttpRequest)
{
XMLHttpRequestObject = new XMLHttpRequest();
}
return XMLHttpRequestObject;
}

function uploadFile(patch,id)
{
var fd = new FormData();
fd.append("Users[avatar]", document.getElementById('avatar').files[0]);
var xhr = xmlhttpRequest();
if(xhr)
{
var obj=document.getElementById(id);
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
xhr.open("POST", patch);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.onreadystatechange=function()
{

if(xhr.readyState > 0 && xhr.readyState < 4)
{
obj.innerHTML=loadingmessage;
}

if(xhr.readyState==4 && xhr.status==200)
{
obj.innerHTML=xhr.responseText;
}

}
xhr.send(fd);
}
}

function uploadProgress(evt)
{
if (evt.lengthComputable)
{
var percentComplete = Math.round(evt.loaded * 100 / evt.total);
document.getElementById('progressNumber').innerHTM L = percentComplete.toString() + '%';
document.getElementById('prog').value = percentComplete;
}
else {
document.getElementById('progressNumber').innerHTM L = 'unable to compute';
}
}

function uploadComplete(evt)
{
alert('بارگزاری فایل با موفقیت انجام شد');
}

function uploadFailed(evt)
{
alert("بارگزاری فایل با شکست روبرو شد");
}

function uploadCanceled(evt)
{
alert("بارگزاری فایل متوقف شد");
}


</script>
<?php
$form=$this->beginWidget('CActiveForm', array(
'id'=>'form_upload_avatar',
'enableAjaxValidation' => FALSE,
'htmlOptions' => array('enctype' => 'multipart/form-data'),
));
?>
<div id="avatarId">
<img src="<?php echo Yii::app()->request->baseUrl; ?>/img/avatar/default/default-avatar.jpg" alt="default-avatar" />
</div>

<br />


<?php
echo $form->fileField(
$model,
'avatar',
array(
'id'=>'avatar',
'class'=>'text-align-left-dir-ltr',
'style'=>'border:#666 thin dashed;
font-family:Arial, Helvetica, sans-serif;
font-size:13px;
',
'tabindex'=>'8'
)
);
?>

<br />

<div id="progressNumber"></div>
<progress id="prog" min="0" max="100" ></progress>


<hr />

<?php
echo CHtml::htmlButton(
CHtml::encode('آپلود تصویر'),
array(
'onclick'=>"uploadFile('".Yii::app()->createUrl("users/upload")."','avatarId')",
'id'=> 'Post',
'class'=>'btn btn-primary btn-flat',
)
);
?>

<?php $this->endWidget(); ?>


</div>



کد بخش کنترولر :



public function actionUpload()
{


if(isset($_FILES['Users']))
echo 'a';
else
echo 'b';

}




دوستان ! در حال حاضر در div با ای دی avatarId حرف b نمایش داده میشه من فکر می کنم در انتقال فایل از فرم به کنترولر دچار مشکل شدم یعنی در کد :



var fd = new FormData();
fd.append("Users[avatar]", document.getElementById('avatar').files[0]);



به درستی عمل نکردم. ممنون میشم از دوستان که برای رفع مشکل کد به بنده کمک کنن.

با تشکر از همه ...

چرا این همه کد زدی میتونی خیلی راحت با چند خط از jquery form استفاده کنی
از این استفاده کن خیلی امکانات دیگه هم برات میاره

under22
پنج شنبه 28 اسفند 1393, 11:37 صبح
لینک jquery form رو برات میزارم .
http://malsup.com/jquery/form/
تو این لینک داکومنتشم هست .
بتدا فرمت رو کامل بساز بعد تابع jquery form و صدا بزن تو لینک توضیحاتش هست و فرمت ایجکس میره و اگه فایل داشته بازی بازم توضیحاتش هست میتونی با صدا کردن تابعش فایلت رو آپلود کنی