Zend_File_Transfer 多个文件上传不均匀

2024-03-07

标题很奇怪,是的,但问题很简单;简直是加重了。我有一个没有使用 Zend Form 构建的表单,它有两个文件上传:

<input name="image" type="file" />
<input name="file" type="file" />

这是我的控制器中处理上传的代码块。实际上还有更多,但这是相关的部分:

$data['image'] = (isset($_FILES["image"]) && $_FILES["image"]["name"] ? $_FILES["image"]["name"] : NULL);
$data['file'] = (isset($_FILES["file"]) && $_FILES["file"]["name"] ? $_FILES["file"]["name"] : NULL);

$options = array('ignoreNoFile' => TRUE);
$upload = new Zend_File_Transfer();

$upload->setOptions($options)
       ->addFilter('Rename', array('target' => RESOURCES_IMG . $data['image'], 'overwrite' => TRUE), 'image')
       ->addFilter('Rename', array('target' => RESOURCES_FILES . $data['file'], 'overwrite' => TRUE), 'file')
       ->addValidator('ImageSize', false, array('minwidth'  => 100,
                                                'maxwidth'  => 100,
                                                'minheight' => 100,
                                                'maxheight' => 100), 'image')
       ->addValidator('Extension', false, 'jpg', 'image');

if (!$upload->isValid())
{
 echo '<h1>Oops</h1><p>Please correct the following errors: <hr /></p>';

 foreach ($upload->getMessages() as $key => $val)
 {
  echo '<p><strong>' . $key . '</strong><br />' . $val . '</p>';
 }
 die;
}
else
{
 $upload->receive();
} // if (!$upload->isValid())

这非常简单。 $data 的内容只是我抓取文件名(如果存在)或将变量设置为 NULL。我将 addFilter() 和 addValidator() 分段,仅影响其相关文件,在本例中为“图像”或“文件” - 表单字段的名称。

“文件”上传始终有效!但是,“图像”上传不会,而且它会将临时文件放入 RESOURCES_FILES 目录中,这根本没有意义。因此,除了 php8TJT13、phpXmOzQM 等文件之外,该目录还包含 PDF 和其他任何内容。

我一直盯着这段代码,并通过 Stack Overflow 和谷歌搜索,但我找不到任何人遇到这个问题。帮助!


好吧,所以我做了更多挖掘,结果发现我的链接方式可能有问题addFilter()所以我决定朝不同的方向前进,尝试隔离每个文件并单独处理它的上传。到目前为止,它似乎正在发挥作用。这是修改后的代码:

$data['image'] = (isset($_FILES["image"]) && $_FILES["image"]["name"] ? $_FILES["image"]["name"] : NULL);
$data['file'] = (isset($_FILES["file"]) && $_FILES["file"]["name"] ? $_FILES["file"]["name"] : NULL);

$upload = new Zend_File_Transfer();

$files = $upload->getFileInfo();

$options = array('ignoreNoFile' => TRUE);
$upload->setOptions($options);

foreach ($files as $field => $contents)
{
 if(!strlen($contents["name"]))
 {
  continue;
 }

 // upload instructions for image
 if ($field == 'image')
 {
  $upload->addFilter('Rename', array('target' => RESOURCES_IMG . $data['image'], 'overwrite' => TRUE), 'image')
         ->addValidator('ImageSize', false, array('minwidth'  => 100,
                                                  'maxwidth'  => 100,
                                                  'minheight' => 100,
                                                  'maxheight' => 100), 'image')
         ->addValidator('Extension', false, 'jpg', 'image');
 }

 // upload instructions for file
 if ($field == 'file')
 {
  $upload->addFilter('Rename', array('target' => RESOURCES_FILES . $data['file'], 'overwrite' => TRUE), 'file');
 }

 if(!$upload->receive($field)) {
  echo '<h1>Oops</h1><p>Please correct the following errors: <hr /></p>';

  foreach ($upload->getMessages() as $key => $val)
  {
   echo '<p><strong>' . $key . '</strong><br />' . $val . '</p>';
  }
  die;
  //return;
 }
} // foreach

伪解释

我用getFileInfo()获取我可用的文件数组,然后循环遍历每个文件。在我第一次的开始for循环我检查该文件是否有名称,如果没有名称,我假设该字段留空并且是NULL所以我告诉循环跳过那个continue.

一旦进入循环,我只需使用简单的条件将上传指令与适当的表单字段进行匹配。如果您喜欢 Zend 的东西,其余的应该是不言自明的。

希望这可以帮助处于我困境的其他人。如果您是 Zend 专家,也许您可​​以评论我的解决方案或修复导致问题的错误。可能有一种更“Zend”的方式来做到这一点,但它现在正在工作,而且感觉非常好。

参考

为什么我认为这是连锁的addFilter()方法,请参见示例#3(如下)下的注释:

注意:请注意,即使允许多次设置相同的过滤器,但在对同一过滤器使用不同选项时,这样做可能会导致问题。

http://framework.zend.com/manual/1.11/en/zend.file.transfer.filters.html http://framework.zend.com/manual/1.11/en/zend.file.transfer.filters.html

一篇随机的博客文章启发我尝试隔离每个,我称之为“上传指令”,尽管我不确定它是否是这样称呼的:

http://www.pc-freak.net/blog/tag/uploading-multiple-files-from-a-form-with-zend-framework-zf-storing-uploaded-zf-files-with-unique-name/ http://www.pc-freak.net/blog/tag/uploading-multiple-files-from-a-form-with-zend-framework-zf-storing-uploaded-zf-files-with-unique-name/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Zend_File_Transfer 多个文件上传不均匀 的相关文章

  • 使用 FormData 上传 JavaScript Blob

    我在将 javascript 创建的 blob 上传到我的服务器时遇到问题 基本思想是用户上传图像 在 javascript 中我对图像进行居中裁剪并在传输之前对其进行下采样 图像处理工作正常 但上传本身无法正常工作 这是执行从 canva
  • Blueimp jQuery 文件上传,传递额外的表单数据

    我可以使用一些帮助 我已经设法使 blueimp jQuery 文件上传为我工作 但我仍然绝对是一个新手 我对 jQuery 等知之甚少 所以请尝试将其清晰明了地提供给我尽可能简单 我会尝试具体一点 好的 我想实现的是人们可以上传照片 并为
  • 在文件输入上反应 PWA IOS/Safari 单击事件有时不打开菜单

    我们的 React PWA 应用程序有问题 我需要群体智能 从 2021 年 10 月开始 我们的部分 iOS 15 用户会出现以下问题 用户单击 触摸
  • 强大的上传不起作用:“文件”未定义,没有错误

    我正在尝试使用 formidable 上传文件 按照中的教程进行操作节点入门书 http www nodebeginner org 按照这段代码 我有一个服务器模块 它通过requestrequestHandler 模块的对象 主页加载带有
  • 干预/图像上传错误{{图像源不可读}}

    我正在尝试添加个人资料图片上传拉拉维尔 5 1 我用的是Intervention Image打包但当我尝试上传图像时出现此错误 AbstractDecoder php 第 302 行中的 NotReadableException 图像源不可
  • 如何使用 Zend_Db 启用 SQL 输出到日志文件?

    我想知道 Zend Db 是否可以做到这一点 但我正在寻找类似 SQL 查询日志记录之类的东西 类似于 Hibernate 的做法 它向您显示它在日志文件中生成的 SQL 您可以使用 Zend Db Profiler 来完成此任务 教程 Z
  • 带预览和进度栏的 Twitter Bootstrap 图像上传

    我如何使用 Twitter Bootstrap 上传带有预览和进度条的单个图像 目前 在保存图像之前 我看不到上传图像的任何预览或进度条 Jasny 的 Bootstrap 分支让您能够接近这一点 看文档 http jasny github
  • 使用 HttpHandler 或 HttpModule 上传大文件?

    我有一个网络表单应用程序 它需要能够上传大文件 100MB 我打算使用 httpHandler 和 httpModule 将文件拆分为chunk 我也看过http forums asp net t 55127 aspx http forum
  • 可断点续传上传(适用于 Android 或 Java 的 Google Drive SDK)

    我曾提到过检查上传和下载进度 https stackoverflow com questions 13580109 check progress for upload download google drive api for androi
  • Apache FileUpload API 中的 InputStream 已关闭

    这是一个非常具体的问题 我希望这里有人对 FileUpload API 有很好的了解 如果您使用过此 API 您应该知道 当超过文件的最大大小时 将无法读取下一项 因为会抛出 FileSizeLimitExceededException 并
  • 如何以编程方式将文件上传到网站?

    我必须将文件上传到服务器 该服务器仅公开带有文件上传按钮的 jsf 网页 通过 http 我必须自动化一个进程 作为java独立进程完成 该进程生成一个文件并将文件上传到服务器 遗憾的是 必须上传文件的服务器不提供FTP或SFTP 有没有办
  • Zend Framework 2相册教程发生404错误请求的URL无法通过路由MAMP OSX匹配

    刚刚也在 IRC 频道 ZFTalk 上发布了这个 希望我能得到一些关于 ZF2 ZF2 专辑教程 使用 MAMP 的 OSX 的帮助 骨架框架 主页正在运行 问题 完成第 8 5 节 列出专辑 后 您用一些代码填充 module Albu
  • 使用 Django ModelForm 上传个人资料图片

    我环顾过相关问题 但似乎没有一个答案有效 我正在尝试上传用户的个人资料图像并让它替换 覆盖 当前图像 保存图像后 我想将文件名更改为用户 ID 图像将以当前形式上传 但不会替换现有图像 例如 它将保存为 2 1 png class Phot
  • Zend 框架将字母“f”输出到我的页面上

    我已经下载了 Zend 框架稳定版本 我相信是 1 11 上传到我的服务器 并将其添加到我的 php 包含路径中 我的目标是使用 Feed 和 Feed Writer 模块来处理一些 RSS 和 Atom 的繁重工作 问题是 每当我包含 F
  • 检查条件并通过 Zend 中的 Regex 识别 url 中的模式

    我正在实现 Zend Regex 路由 并且必须对 url 执行多次检查 例如 如果这是我的网址 http localhost application public index php module controller action 这是
  • Laravel $request->file() 返回 null

    尝试在后端使用 Laravel 上传文件时遇到问题 Issue Laravel request gt file 方法返回 null Setup 我使用以下方法构建了一个 AJAX 请求超级代理人 https github com visio
  • 如何将 .xlsx 文件上传到 jenkins 作业

    如何将 xlsx 文件作为构建参数上传到 jenkins 作业 我尝试使用文件参数 但我发现该文件正在丢失其扩展名或原始格式 有什么方法可以从 jenkins UI 将 excel 文件上传到 jenkins 作业吗 In the file
  • IE8 post 文件定位 iframe,到达服务器时为空

    我有一个表格 只有一个input file在其中 表单的目标是一个命名的iframe 当用户选择一个文件时 它会自动将表单发送到服务器 这适用于 IE10 firefox chrome 但在 IE8 中 当 IE8 发布表单时 我的控制器方
  • 过滤文件上传仅用于文本文件

    我使用的是 Firefox 版本 14 0 1 我需要过滤上传文件窗口以仅显示 txt files 我的浏览器不仅仅支持文本文件 text plain 我可以通过指定此格式来限制图像文件 image 但我只需要过滤文本文件在文件选择器窗口中
  • Zend Framework 生成唯一的字符串

    我想生成一个唯一的 4 6 个字符长的字母数字字符串 以便与每个记录 用户 一起保存在数据库中 db 字段具有唯一索引 因此尝试保存预先存在的字符串会生成错误 现在我正在生成一个随机字符串并使用 try catch 因此在添加新记录时如果抛

随机推荐