yii2中多个文件上传的api

如何解决yii2中多个文件上传的api

嘿,我是yii2的初学者,当我的请求只给我1个文件数组而不是多个文件数组时,我就在yii2中学习如何创建api

下面是我的模型文件

<?php

namespace common\models;

use Yii;

/**
 * This is the model class for table "question_attachment".
 *
 * @property int $id
 * @property int $question_id
 * @property string $attachment
 */
class QuestionAttachment extends \yii\db\ActiveRecord
{
    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return 'question_attachment';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['attachment'],'required'],[['question_id'],'integer'],//[['attachment'],'string','max' => 255],[['attachment'],'file','maxFiles' => 10,'skipOnEmpty' => true,'extensions' => 'png,jpge,jpg,pdf,mp4','mimeTypes' => 'image/jpeg,image/png,image/jpe'],];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID','question_id' => 'Question ID','attachment' => 'Attachment',];
    }

    public function getQuestions(){
        return $this->hasOne(Question::className(),['id' => 'id']);
    }
}

下面的代码是我要上传多张图片的动作

public function actionMultiple($params=['attributes'=>[
        ['name'=>'QuestionAttachment[attachment]','type'=>'file','description'=>'']],'auth'=>0,'method'=>'POST'])
    {
        $model = new QuestionAttachment();
        $model->question_id = '1';

        if (Yii::$app->request->isPost) {
            $model->attachment = UploadedFile::getInstances($model,'attachment');
            if(!$model->attachment){
                return array('status'=>false,'message'=>'Please select a photo.');
            }

            if ($model->attachment && $model->validate()) {
                foreach ($model->attachment as $file) {
                    $file->saveAs(Yii::$app->basePath.'/../img_assets/questions/' . $file->baseName . '.' . $file->extension);
                }
            }
        }print_r($model);die();

        return array('status' => true,'message' => 'Error');
    }

这就是我对此操作代码的回应

common\models\QuestionAttachment Object
(
    [_attributes:yii\db\BaseActiveRecord:private] => Array
        (
            [question_id] => 1
            [attachment] => Array
                (
                    [0] => yii\web\UploadedFile Object
                        (
                            [name] => farcry1.jpg
                            [tempName] => /tmp/phpUBNOW2
                            [type] => image/jpeg
                            [size] => 2648781
                            [error] => 0
                            [_tempResource:yii\web\UploadedFile:private] => Array
                                (
                                )

                        )

                )

        )

    [_oldAttributes:yii\db\BaseActiveRecord:private] => 
    [_related:yii\db\BaseActiveRecord:private] => Array
        (
        )

    [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array
        (
        )

    [_errors:yii\base\Model:private] => Array
        (
        )

    [_validators:yii\base\Model:private] => ArrayObject Object
        (
            [storage:ArrayObject:private] => Array
                (
                    [0] => yii\validators\RequiredValidator Object
                        (
                            [skipOnEmpty] => 
                            [requiredValue] => 
                            [strict] => 
                            [message] => {attribute} cannot be blank.
                            [attributes] => Array
                                (
                                    [0] => attachment
                                )

                            [on] => Array
                                (
                                )

                            [except] => Array
                                (
                                )

                            [skipOnError] => 1
                            [enableClientValidation] => 1
                            [isEmpty] => 
                            [when] => 
                            [whenClient] => 
                            [_events:yii\base\Component:private] => Array
                                (
                                )

                            [_eventWildcards:yii\base\Component:private] => Array
                                (
                                )

                            [_behaviors:yii\base\Component:private] => 
                        )

                    [1] => yii\validators\NumberValidator Object
                        (
                            [integerOnly] => 1
                            [max] => 
                            [min] => 
                            [tooBig] => 
                            [tooSmall] => 
                            [integerPattern] => /^\s*[+-]?\d+\s*$/
                            [numberPattern] => /^\s*[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?\s*$/
                            [attributes] => Array
                                (
                                    [0] => question_id
                                )

                            [message] => {attribute} must be an integer.
                            [on] => Array
                                (
                                )

                            [except] => Array
                                (
                                )

                            [skipOnError] => 1
                            [skipOnEmpty] => 1
                            [enableClientValidation] => 1
                            [isEmpty] => 
                            [when] => 
                            [whenClient] => 
                            [_events:yii\base\Component:private] => Array
                                (
                                )

                            [_eventWildcards:yii\base\Component:private] => Array
                                (
                                )

                            [_behaviors:yii\base\Component:private] => 
                        )

                    [2] => yii\validators\FileValidator Object
                        (
                            [extensions] => Array
                                (
                                    [0] => png
                                    [1] => jpge
                                    [2] => jpg
                                    [3] => pdf
                                    [4] => mp4
                                )

                            [checkExtensionByMimeType] => 1
                            [mimeTypes] => Array
                                (
                                    [0] => image/jpeg
                                    [1] => image/png
                                    [2] => image/jpe
                                )

                            [minSize] => 
                            [maxSize] => 
                            [maxFiles] => 10
                            [minFiles] => 0
                            [message] => File upload failed.
                            [uploadRequired] => Please upload a file.
                            [tooBig] => The file "{file}" is too big. Its size cannot exceed {formattedLimit}.
                            [tooSmall] => The file "{file}" is too small. Its size cannot be smaller than {formattedLimit}.
                            [tooMany] => You can upload at most {limit,number} {limit,plural,one{file} other{files}}.
                            [tooFew] => You should upload at least {limit,one{file} other{files}}.
                            [wrongExtension] => Only files with these extensions are allowed: {extensions}.
                            [wrongMimeType] => Only files with these MIME types are allowed: {mimeTypes}.
                            [attributes] => Array
                                (
                                    [0] => attachment
                                )

                            [on] => Array
                                (
                                )

                            [except] => Array
                                (
                                )

                            [skipOnError] => 1
                            [skipOnEmpty] => 1
                            [enableClientValidation] => 1
                            [isEmpty] => 
                            [when] => 
                            [whenClient] => 
                            [_events:yii\base\Component:private] => Array
                                (
                                )

                            [_eventWildcards:yii\base\Component:private] => Array
                                (
                                )

                            [_behaviors:yii\base\Component:private] => 
                        )

                )

        )

    [_scenario:yii\base\Model:private] => default
    [_events:yii\base\Component:private] => Array
        (
        )

    [_eventWildcards:yii\base\Component:private] => Array
        (
        )

    [_behaviors:yii\base\Component:private] => Array
        (
        )

)

当我上传了两张图片,但是数组仅显示了我弄乱了一张图片吗?

解决方法

所以最后我得到了答案,我的foreach返回语句没有保存多个数据,所以这里是最终代码

public function actionMultiple(){
        $model = new Media;
        $model->post_id = '2';
        if (Yii::$app->request->ispost) {
            $model->media = UploadedFile::getInstances($model,'media');
            if ($model->media) {
                foreach ($model->media as $value) {
                    $model = new Media;
                    $model->post_id = '2';
                    $BasePath = Yii::$app->basePath.'/../images/post_images';
                    $filename = time().'-'.$value->baseName.'.'.$value->extension;
                    $model->media = $filename;
                    if ($model->save()) {
                        $value->saveAs($BasePath.$filename);
                    }
                }
                return array('status' => true,'message' => 'Image Saved'); 
            }
        }
        return array('status' => true,'data' => $model);
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-