file - Yii2上传的音频文件未保存在上传文件夹中

标签 file audio upload yii2

我有一个同时具有图像和音频文件上传选项的表单。尽管路径已保存在数据库中,但图像文件正在保存,但音频文件却未保存。
表单模型:

public $file;
public $binary_file;
public $s_date, $e_date;
public $comment;

public static function tableName()
{
    return 'complain';
}

/**
 * @inheritdoc
 */
public function rules()
{
    return [
        [['complain'], 'required'],
        [['complain'], 'string'],
        [['file'], 'file', 'extensions' => 'png, jpg', 'maxFiles' => 4],
        [['binary_file'], 'file', 'extensions' => 'mp3'],
        [['s_date','e_date','complain_date', 'last_updated'], 'safe'],
        [['comment'], 'string', 'max' => 255],
        [['complain_no'], 'string', 'max' => 20],
    ];
}

以及将实际保存文件的模型:
public function rules()
{
    return [
        [['complain_item_id', 'complain_id'], 'required'],
        [['complain_item_id', 'complain_id'], 'integer'],
        [['file'], 'string', 'max' => 500],
    ];
}

表格:
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]);   ?>

    <div class='col-md-12'>
    <?= $form->field($model, 'complain')->textarea(['rows' => 6]) ?>
    </div>

    <?php if ($model->isNewRecord) {?> 
        <div class='col-md-4'>
        <?= $form->field($model, 'file[]')->fileInput(['multiple' => true])->label('Upload Image') ?>
        </div>

        <div class='col-md-4'>
        <?php echo $form->field($model, 'binary_file')->fileInput()->label('Upload Mp3') ?>
        </div>
    <?php } ?>

    <div class="form-group" style='padding-left:14px;'>
        <?= Html::submitButton($model->isNewRecord ? 'Submit' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-info submit' : 'btn btn-primary']) ?>
    </div>

    <?php ActiveForm::end(); ?>

Controller 代码:
public function actionCreate()
{
    $model = new Complain();

    if ($model->load(Yii::$app->request->post())) {

        $model->save(false);

        // save the image path to database and save the image to the upload folder

        if($model->file = UploadedFile::getInstances($model,'file')) {
            $path = 'uploads/img';
            FileHelper::createDirectory($path);

            foreach($model->file as $fil) {   
                $modelsComplain= new ComplainItem();

                $modelsComplain->save(false);
                $fil->saveAs('uploads/img/img'. $fil->extension);

                $modelsComplain->file = 'img/img'. $fil->extension;
                $modelsComplain->update(false);
            }
        }

        if($model->binary_file = UploadedFile::getInstance($model,'binary_file')) {

            $path = 'uploads/mp3';
            FileHelper::createDirectory($path);

            $modelsComplain= new ComplainItem();

            $modelsComplain->save(false);

            $model->binary_file->saveAs('uploads/mp3/mp3'. $model->binary_file->extension);

            $modelsComplain->file ='mp3/mp3'. $model->binary_file->extension; 
            $modelsComplain->update(false); 
        } 

        return $this->redirect(['view', 'id' => $model->complain_id]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

最佳答案

请使用move_uploaded_file

if(isset($_FILES['binary_file']['tmp_name']) && $_FILES['binary_file']['tmp_name'] != null)
{
    $image = $_FILES['binary_file'];

    $file = $_FILES;

    $new_image['name'] = $_FILES['binary_file']['name'];
    $new_image['type'] = $_FILES['binary_file']['type'];
    $new_image['tmp_name'] = $_FILES['binary_file']['tmp_name'];
    $new_image['error'] = $_FILES['binary_file']['error'];
    $new_image['size'] = $_FILES['binary_file']['size'];
    $image = $new_image;

    $model->binary_file = Yii::$app->params['upload_folder'].time().$file['binary_file']['name']; //set your path
    /**
    * for uploding image as it is in folder
    */
    move_uploaded_file($file['binary_file']['tmp_name'],Yii::getAlias('@webroot')."/".$model->binary_file);

}

关于file - Yii2上传的音频文件未保存在上传文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43804106/

相关文章:

ios - 在两个压缩音频文件中查找匹配的内容

c++ - 解读来自麦克风捕捉设备的 DirectSound 缓冲区元素

python - Raspberry Pi 和 Mplayer 声音循环错误

java - 文件下载代码下载比原始文件大的文件

file - Lua 文件处理

linux - Puppet 文件服务器 - 无法评估

node.js - 最好的通过node.js上传文件的库?

upload - PhpStorm 监视更改并上传到远程服务器

php - 无法将文件移动到 php 中的文件夹中

php - 头像图片上传无页面上传