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