在 Zend Framework 中使用 mime 类型上传 docx 文件失败?

Uploading docx file in Zend Framework with mime type fails?

我正在尝试将用户的简历上传到我的网站

所以我也限制了文件上传 doc、pdf 和 docx

ms word doc 文件与 pdf 一起上传,但 docx 文件与

一起上传

application/zip mime 类型所以文件不会被上传

如何进行正确的 mime 类型检查,以便将 docx 文件作为其他文件上传

下面是我的代码

$config = Zend_Registry::get ( 'config' );



      $files_path = $config->resume->path;



      $adapter = new Zend_File_Transfer ();



      // Limit the MIME type of all given files to gif and jpeg images

      $adapter->addValidator ( 'MimeType', false, array ('application/msword','application/vnd.openxmlformats-officedocument.wordprocessingml.document','application/pdf' ) ); 





    $files = $adapter->getFileInfo ();





    $file_name = null;

    $tmpArr = null;



    foreach ( $files as $file => $info ) {

      if (! empty ( $info ['name'] )) {

        $tmpArr = explode (".", $info ['name'] );

      }

    }



    if (! empty ( $tmpArr )) {

      //$file_name = $tmpArr [0] ."-" . $post ['id'] ."." . $tmpArr [1];

      $file_name = $tmpArr [0] ."-" . $post ['id'] ."." . $tmpArr [count ( $tmpArr ) - 1];

      $adapter->setDestination ( $files_path );



      $adapter->addFilter ( 'Rename', array ('target' => $files_path . DS . $file_name, 'overwrite' => true ) );

      if ($adapter->receive ()) {

        // # = # = # = # = # = # = # = # = # = # = # = # = # = # = # = # = # =

        $arrayKeys = array_keys ( $files );

        $actual_file_name = $tmpArr [0] ."." . $tmpArr [1];

        $uploaded_file_name = $adapter->getFileName ( $arrayKeys [0], false );

        if ($actual_file_name == $uploaded_file_name) {

          rename ( $files_path . DS . $actual_file_name, $files_path . DS . $file_name );

        }

        // # = # = # = # = # = # = # = # = # = # = # = # = # = # = # = # = # =





        $post ['filename'] = $file_name;

        $result = $employeeModel->updateEmployeeResume ( $post );

        $old_file = $files_path . DS . $post ['c_image_name'];

        if (file_exists ( $old_file )) {

          @unlink ( $old_file );

        }



        $this->_flashMessenger->addMessage ( 'Resume added successfully' );

      }
  $adapter->addValidator ( 'MimeType', false, array ('application/msword','application/vnd.openxmlformats-officedocument.wordprocessingml.document','application/pdf','application/zip' ) );
  $adapter->addValidator('Extension', false, 'doc,docx,pdf');

DOCX 基本上是一个 ZIP 文件(你可以用你最喜欢的解压器解压它们,试试看!),所以如果你希望你的用户能够上传 DOCX 文件,你必须允许 ZIP 文件。


我在zend

中添加了一个临时修复

// 允许上传 zip 文件

$config = Zend_Registry::get ( 'config' );



      $files_path = $config->resume->path;



      $adapter = new Zend_File_Transfer ();



      // Limit the MIME type of all given files to gif and jpeg images

      $adapter->addValidator ( 'MimeType', false, array ('application/msword','application/vnd.openxmlformats-officedocument.wordprocessingml.document','application/pdf' ) ); 





    $files = $adapter->getFileInfo ();





    $file_name = null;

    $tmpArr = null;



    foreach ( $files as $file => $info ) {

      if (! empty ( $info ['name'] )) {

        $tmpArr = explode (".", $info ['name'] );

      }

    }



    if (! empty ( $tmpArr )) {

      //$file_name = $tmpArr [0] ."-" . $post ['id'] ."." . $tmpArr [1];

      $file_name = $tmpArr [0] ."-" . $post ['id'] ."." . $tmpArr [count ( $tmpArr ) - 1];

      $adapter->setDestination ( $files_path );



      $adapter->addFilter ( 'Rename', array ('target' => $files_path . DS . $file_name, 'overwrite' => true ) );

      if ($adapter->receive ()) {

        // # = # = # = # = # = # = # = # = # = # = # = # = # = # = # = # = # =

        $arrayKeys = array_keys ( $files );

        $actual_file_name = $tmpArr [0] ."." . $tmpArr [1];

        $uploaded_file_name = $adapter->getFileName ( $arrayKeys [0], false );

        if ($actual_file_name == $uploaded_file_name) {

          rename ( $files_path . DS . $actual_file_name, $files_path . DS . $file_name );

        }

        // # = # = # = # = # = # = # = # = # = # = # = # = # = # = # = # = # =





        $post ['filename'] = $file_name;

        $result = $employeeModel->updateEmployeeResume ( $post );

        $old_file = $files_path . DS . $post ['c_image_name'];

        if (file_exists ( $old_file )) {

          @unlink ( $old_file );

        }



        $this->_flashMessenger->addMessage ( 'Resume added successfully' );

      }
  $adapter->addValidator ( 'MimeType', false, array ('application/msword','application/vnd.openxmlformats-officedocument.wordprocessingml.document','application/pdf','application/zip' ) );
  $adapter->addValidator('Extension', false, 'doc,docx,pdf');

// 禁止上传带有 .zip 的文件并因此上传 docx 文件。

$config = Zend_Registry::get ( 'config' );



      $files_path = $config->resume->path;



      $adapter = new Zend_File_Transfer ();



      // Limit the MIME type of all given files to gif and jpeg images

      $adapter->addValidator ( 'MimeType', false, array ('application/msword','application/vnd.openxmlformats-officedocument.wordprocessingml.document','application/pdf' ) ); 





    $files = $adapter->getFileInfo ();





    $file_name = null;

    $tmpArr = null;



    foreach ( $files as $file => $info ) {

      if (! empty ( $info ['name'] )) {

        $tmpArr = explode (".", $info ['name'] );

      }

    }



    if (! empty ( $tmpArr )) {

      //$file_name = $tmpArr [0] ."-" . $post ['id'] ."." . $tmpArr [1];

      $file_name = $tmpArr [0] ."-" . $post ['id'] ."." . $tmpArr [count ( $tmpArr ) - 1];

      $adapter->setDestination ( $files_path );



      $adapter->addFilter ( 'Rename', array ('target' => $files_path . DS . $file_name, 'overwrite' => true ) );

      if ($adapter->receive ()) {

        // # = # = # = # = # = # = # = # = # = # = # = # = # = # = # = # = # =

        $arrayKeys = array_keys ( $files );

        $actual_file_name = $tmpArr [0] ."." . $tmpArr [1];

        $uploaded_file_name = $adapter->getFileName ( $arrayKeys [0], false );

        if ($actual_file_name == $uploaded_file_name) {

          rename ( $files_path . DS . $actual_file_name, $files_path . DS . $file_name );

        }

        // # = # = # = # = # = # = # = # = # = # = # = # = # = # = # = # = # =





        $post ['filename'] = $file_name;

        $result = $employeeModel->updateEmployeeResume ( $post );

        $old_file = $files_path . DS . $post ['c_image_name'];

        if (file_exists ( $old_file )) {

          @unlink ( $old_file );

        }



        $this->_flashMessenger->addMessage ( 'Resume added successfully' );

      }
  $adapter->addValidator ( 'MimeType', false, array ('application/msword','application/vnd.openxmlformats-officedocument.wordprocessingml.document','application/pdf','application/zip' ) );
  $adapter->addValidator('Extension', false, 'doc,docx,pdf');

相关推荐

  • Spring部署设置openshift

    Springdeploymentsettingsopenshift我有一个问题让我抓狂了三天。我根据OpenShift帐户上的教程部署了spring-eap6-quickstart代码。我已配置调试选项,并且已将Eclipse工作区与OpehShift服务器同步-服务器上的一切工作正常,但在Eclipse中出现无法消除的错误。我有这个错误:cvc-complex-type.2.4.a:Invali…
    2025-04-161
  • 检查Java中正则表达式中模式的第n次出现

    CheckfornthoccurrenceofpatterninregularexpressioninJava本问题已经有最佳答案,请猛点这里访问。我想使用Java正则表达式检查输入字符串中特定模式的第n次出现。你能建议怎么做吗?这应该可以工作:MatchResultfindNthOccurance(intn,Patternp,CharSequencesrc){Matcherm=p.matcher…
    2025-04-161
  • 如何让 JTable 停留在已编辑的单元格上

    HowtohaveJTablestayingontheeditedcell如果有人编辑JTable的单元格内容并按Enter,则内容会被修改并且表格选择会移动到下一行。是否可以禁止JTable在单元格编辑后转到下一行?原因是我的程序使用ListSelectionListener在单元格选择上同步了其他一些小部件,并且我不想在编辑当前单元格后选择下一行。Enter的默认绑定是名为selectNext…
    2025-04-161
  • Weblogic 12c 部署

    Weblogic12cdeploy我正在尝试将我的应用程序从Tomcat迁移到Weblogic12.2.1.3.0。我能够毫无错误地部署应用程序,但我遇到了与持久性提供程序相关的运行时错误。这是堆栈跟踪:javax.validation.ValidationException:CalltoTraversableResolver.isReachable()threwanexceptionatorg.…
    2025-04-161
  • Resteasy Content-Type 默认值

    ResteasyContent-Typedefaults我正在使用Resteasy编写一个可以返回JSON和XML的应用程序,但可以选择默认为XML。这是我的方法:@GET@Path("/content")@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})publicStringcontentListRequestXm…
    2025-04-161
  • 代码不会停止运行,在 Java 中

    thecodedoesn'tstoprunning,inJava我正在用Java解决项目Euler中的问题10,即"Thesumoftheprimesbelow10is2+3+5+7=17.Findthesumofalltheprimesbelowtwomillion."我的代码是packageprojecteuler_1;importjava.math.BigInteger;importjava…
    2025-04-161
  • Out of memory java heap space

    Outofmemoryjavaheapspace我正在尝试将大量文件从服务器发送到多个客户端。当我尝试发送大小为700mb的文件时,它显示了"OutOfMemoryjavaheapspace"错误。我正在使用Netbeans7.1.2版本。我还在属性中尝试了VMoption。但仍然发生同样的错误。我认为阅读整个文件存在一些问题。下面的代码最多可用于300mb。请给我一些建议。提前致谢publicc…
    2025-04-161
  • Log4j 记录到共享日志文件

    Log4jLoggingtoaSharedLogFile有没有办法将log4j日志记录事件写入也被其他应用程序写入的日志文件。其他应用程序可以是非Java应用程序。有什么缺点?锁定问题?格式化?Log4j有一个SocketAppender,它将向服务发送事件,您可以自己实现或使用与Log4j捆绑的简单实现。它还支持syslogd和Windows事件日志,这对于尝试将日志输出与来自非Java应用程序…
    2025-04-161