我试图使用kartikfileinput
在表单中加载多个文件。
我使用我的附件
表将文件名和其他字段保存在数据库中,并将文件保存在我的文件系统中。我通常把附件
和注册表
通过注册表
表链接起来。
我成功地保存了多个文件,但当我加载特定注册表的文件时,我希望看到它们,就像第一次加载它们时一样。
我正试图使用以下代码来解决此问题:
控制器动作
public function actionLoadMultiple($registryId = NULL){
$model = new Attachment();
if(!$registryId){
$model->files = [];
$registryId = 6;//For example
$registry = \app\models\Registry::findOne($registryId);
$registryAttachments = $registry->attachments;//Find all Attachment record for registryId
foreach($registryAttachments as $attachment){
$model->files[$attachment->original_filename] = $attachment->filePath();
}
}
if (Yii::$app->request->isPost) {
//Loading the files in the model.
//After I load them, I save them using the model function uploadMultiple
$model->files = UploadedFile::getInstances($model, 'files');
$loadedFiles = $model->uploadMultiple();
if ($loadedFiles) {
// file is uploaded successfully
foreach($loadedFiles as $originalFileName=>$fileName){
$attachment = new Attachment();
$attachment->section = $model->section?: 'oth';
$attachment->description = $model->description ?: 'Other';
$attachment->filename = $fileName;
$attachment->original_filename =$originalFileName;
if(!$attachment->save()){
$attachment->removeFile();
return ['error'=>\Yii::t('app','Error saving attachments to db. Please contact an administrator')];
}
}
return $this->redirect(['index']);
}
}
return $this->render('load_multiple',['model'=>$model]);
}
模型函数
public function uploadMultiple(){
$files = $this->files;
$section = $this->section ?: '';
if(!$files){
return false;
}
$fileNameList = [];
$path = Utility::getAttachmentsBasePath();
$count = 1;
foreach ($files as $file) {
if (!$section) {
$section = 'oth';
}
$filename = \app\models\Attachment::generateFilename($file->name);
//I set the path to the right folder
$completePath = $path . '/' . $section . '/' . $filename;
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$completePath = str_replace('/', '\\', ($completePath));
}
if (!$file->saveAs($completePath)) {
Yii::error("Error loading file - error code {$file->error}", "upload");
return ['error' => \Yii::t('app', 'Error saving files. Please contact an administrator')];
}
if (isset($fileNameList[$file->name])) {
$fileNameList[$file->name . '_' . $count] = $filename ;
$count++;
} else {
$fileNameList[$file->name] = $filename;
}
}
return $fileNameList;
}
查看加载倍数
<?php
use yii\widgets\ActiveForm;
use kartik\file\FileInput;
use yii\helpers\Html;
$this->title = Yii::t('app', 'Create Multiple Attachment');
$initialPreviewAttachmentFile = [];
$fileInputShowRemove = true;
if($model->files){
foreach($model->files as $key=>$file){
$basePath = Yii::$app->params['attachmentsBasePath'].'/reg';
$type = \app\models\Attachment::fileInputTypeForUploaded($key);
$initialPreviewAttachmentFile[] = $file;
$initialPreviewAttachmentCaption[] = ['caption'=>$key,'type'=>$type,];
}
}
$form = ActiveForm::begin(['enableAjaxValidation' => true,]);
echo $form->field($model, 'files[]')->widget(FileInput::class,
[
'name' => 'files[]',
'options' => ['multiple' => true],
'pluginOptions' => [
// 'minFileCount' => 1,
'maxFileCount' => 10,
'maxFileSize' => Yii::$app->params["attachmentsMaxSize"],
'initialPreview' => $initialPreviewAttachmentFile ,
'initialPreviewAsData' => (!empty($initialPreviewAttachmentFile)),
'initialPreviewConfig' => $initialPreviewAttachmentCaption,
'fileActionSettings' => [
'showDownload' => false,
'showRemove' => true,
],
],
]);
?>
<div class="form-group">
<?=
Html::submitButton(Yii::t('app', 'Save'), [
'class' => 'btn btn-success save-attachment',
])
?>
如果选定的
注册表
附带了3个文件,则结果如下:
在此设置中,我有以下问题:
我想查看每个文件的内容,但它不起作用
当我加载一个新文件时,小部件会删除已经加载的文件
“单个文件删除”按钮不起作用
当我加载一个新文件时,小部件会删除已经加载的文件。仅适用于ajax加载
所以我正在和Yii2一起工作,对它来说是相当新的。我正在使用Kartik文件上传,并试图将代码转换为多个文件。但它只保存了第一个文件。 我已经删除了验证,因为这也是失败的,但一旦我知道所有其他的都在工作,我会重新添加。 型号: 控制器: 查看:
问题内容: 我需要处理分散在各个目录中的多个文件。我想将所有这些加载到单个RDD中,然后在其上执行map / reduce。我看到SparkContext能够使用通配符从单个目录加载多个文件。我不确定如何从多个文件夹加载文件。 以下代码段失败: 这在第三个循环中失败,并显示以下错误消息: 鉴于我仅提供了两个参数,所以这很奇怪。任何指针表示赞赏。 问题答案: 措辞如何呢? 在Scala中,有两种变体
用PySimpleGUI一次可以选择多个文件路径吗 只能选择一个文件 null 没有循环模式的多个文件的任何API?
在单个 Step 中处理多个输入文件是很常见的需求。如果这些文件都有相同的格式, 则可以使用 MultiResourceItemReader 来进行处理(支持 XML/或 纯文本文件)。 假如某个目录下有如下3个文件: file-1.txt file-2.txt ignored.txt file-1.txt 和 file-2.txt 具有相同的格式, 根据业务需求需要一起处理. 可以通过 Muli
我想上传多输入文件。我尝试了下面的代码,但文件没有上传,我无法获得上传目录。 HTML 控制器 我也尝试用下面的代码获取上传的数据,但为什么总是出现错误?
It is also possible to lazy load entry points. This means that you load parts of your application as they are requested. A typical scenario for this would be that your users only visits specific parts