typo3 - 如何使用 TYPO3 Fluid form.upload 上传文件并将其传递给 Extbase 控制器
问题描述
我正在使用form.upload ViewHelper 上传文件。
<f:form enctype="multipart/form-data" action="list" name="import" object="{import}" method="POST">
<f:form.upload name="file" property="file" />
<f:form.submit value="Submit" />
</f:form>
问题是访问文件。$import 对象包含一个文件名,但该文件不存在。
解决方案
我的问题是,该文件在处理时已被删除。我重定向到我的控制器操作中的另一个操作,这开始了一个新请求。
$this->redirect('list', $import);
如果该文件未被移走或重命名,则该文件将在请求结束时从临时目录中删除。
(https://www.php.net/manual/en/features.file-upload.post-method.php)
文件的上传方式不是 TYPO3 特定的,可以采用不同的方式处理,请参见上面的链接。
- 您还应该相应地设置临时路径,请参见上面的链接。
- 文件类型可以通过接受来限制,例如
accept='text/csv'
我在后端模块中使用它。以下代码有效。
体液
<f:form enctype="multipart/form-data" action="create" name="import" object="{import}" method="POST">
<f:form.upload name="file" property="file" />
<f:form.submit value="Submit" />
</f:form>
模型类:Import.php
class Import extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
{
/** @var array */
protected $file = [];
/**
* @return array
*/
public function getFile()
{
return $this->file;
}
/**
* @param array $file
* @return void
*/
public function setFile(array $file)
{
$this->file = $file;
}
}
控制器 createAction()
/**
* @param Import $import
* @return void
*/
public function createAction(Import $import)
{
$file = $import->getFile();
if ($file) {
$path = $file['tmp_name'];
}
// ...
}
使用包含正确填写元数据的文件属性的 Import 对象调用该操作,例如
['name'] = myfile.csv
['type'] = 'text/csv'
['tmp_name'] = '/tmp/hpGLv1E'
['error'] = 0
['size'] = 51550
推荐阅读
- c - C中按值或指向结构的指针的多个参数
- css - mvc5 创建新的 CSS 不起作用
- php - yii2无法上传视频文件
- delphi - Delphi:如何在后代中重载父构造函数但将其隐藏在其他不同的后代中
- cuda - 为什么 CUDA 索引是二维的?
- sql - 在 SQL 中将数字转换为日期 (DD-MON-YY)
- sed - 在 Makefile 中使用 SED 将 yarn 生成的文件名替换为哈希
- octave - 如何在 ubuntu 的 Octave 中安装符号包?
- java - Destinationsource.getQueues 未使用 SSL-Connection 返回正确数量的队列
- amcharts - Amcharts Maps,如何设置和获取 MapPolygonSeries 的 id?