如何解决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 举报,一经查实,本站将立刻删除。