2016-10-15 11 views
0

画像はアップロードされますが、アップロード動画はBad Request (#400) Unable to verify your data submissionと表示されます。何が原因なの?コントローラでenableCsrfValidationを編集しませんでした。あなたの助けを前もってありがとう。以下はコード(Yii2.0.8)です。
モデルYii2動画アップロードエラー表示#400

public function uploader() { 

    $file = UploadedFile::getInstanceByName('file'); 
    if(!$this->validate()){ 
      \Yii::$app->session->setFlash('warning', implode(', ', $this->firstErrors)); 
      return FALSE; 
     } 

    if($file && $file !== NULL){ 
     $pic = $this->mediaType($file); 
     $path = Yii::getAlias('@webroot').$pic; 
     if(!$file->saveAs($path)){ 
      Yii::$app->session->setFlash('error', 'Upload Error: '.$file->error); 
      return FALSE; 
     } 
     $this->file = Yii::getAlias('@web').$pic; 
    } elseif (!$this->isNewRecord) { 
     //no upload was initiated and it is not a new record, assign old value 
     $this->file = $this->getOldAttribute('file'); 
    } else { 
     //it is a new record and no upload was initiated 
     $this->file = ''; 
    } 

    if(!$this->save('false')){ 
     Yii::$app->session->setFlash('error', 'Saving To Database Error: '. implode(', ', $this->firstErrors)); 
     return FALSE; 
    } 
    Yii::$app->session->setFlash('success', 'SAVED SUCCESSFULLY!'); 
    return TRUE; 
} 

/** 
* check if extention is in video format to determine which folder to save file 
* @param UploadedFile $file 
* @return string 
*/ 
public function mediaType(UploadedFile $file) { 
    if(\yii2mod\helpers\ArrayHelper::isIn($file->extension, ['mp4', '3gp', 'mpeg4'])){ 
     return '/files/videos/users/posts/'.Yii::$app->user->id.'-'.$file->baseName.'.'.$file->extension; 
    } 
    return '/files/images/users/posts/'.Yii::$app->user->id.'-'.$file->baseName.'.'.$file->extension; 
} 

ビュー

<div class="holder"></div> 
<div class="message-form "> 
<?php $form = ActiveForm::begin([ 
    'id' => 'updates-form', 
    'options' => [ 
     'validationUrl' => 'url/validate' 
    ] 
]); 
<div class="container-fluid" id="wrap-picker"> 
<div id="placer"></div> 
<div class="row media"> 
<div id="camera-wrap" class="col-xs-8 col-sm-5"> 
<?= $form->field($model, 'file',['inputOptions' => ['accept'=>"image/*;capture=camera", 'class' => 'do-camera']])->fileInput()->label('') ?>    
</div> 
<div class="col-xs-4 col-sm-7"> 
<i id="media-remove"><i class="fa fa-remove fw" ></i> Remove</i> 
</div> 
</div>   
<div class="center"> 
<i id="camera-picker" class="media-picker"> <i class="hint">Picture</i> 
<i class="fa fa-camera-retro" ></i> </i> &nbsp; &nbsp; &nbsp; <i id="video-picker" class="media-picker"><i class="hint">Video</i> <i class="fa fa-video-camera" ></i></i> 
</div> 
</div> 
</div> 
<?php ActiveForm::end();?> 
</div> 
<?php 
$js = <<< JS 
function hideMedia(){ 
    $(".media").appendTo(".holder"); 
    $(".media").hide(); 
} 
hideCamera(); 
$(".media-picker").click(function(){ 
//ensure .media is visible and child to #placer before calling trigger 
if($("#wrap-picker").find($(". media")).length !== 1){ 
    $(".media").fadeIn(); 
    $(". media").appendTo("#placer"); 
}   
$(".do-camera").trigger('click'); 
}); 
$("#video-picker").click(function(){ 
    $(".do-camera").removeAttr('accept'); 
    $(".do-camera").attr("accept", "video/*;capture=camcoder"); 
}); 
$("#camera-picker").click(function(){ 
    $(".do-camera").removeAttr('accept'); 
    $(".do-camera").attr("accept", "image/*;capture=camera"); 
    }); 
$("#media-remove").click(function(){ 
    hideMedia(); 
}); 
JS; 
$this->registerJs($js); 
?> 

答えて

0

falseにenableCsrfValidationを設定し、デフォルトはtrueで、あなたが_csrfを送信していないと、これはエラーを生成してみます。

PS:申し訳ありません。英語:

+0

ビデオがアップロードされたときに_csrf値が送信されないのはなぜですか?これについて私は何ができますか?私は、アップロードを行うパブリックユーザーであるため、セキュリティ上の理由からenableCsrfValidationをfalseに設定する危険性はありません。 –

関連する問題