如何使用jQuery读取$_FILES['name']['tmp_name']

How to read the $_FILES['name']['tmp_name'] using jQuery

本文关键字:name tmp FILES 何使用 jQuery 读取      更新时间:2023-09-26

我正在制作一个应用程序,以使用excel_reader2.php将excel导入数据库。我创建了一个用于上传 excel 文件的表单,当要上传的文件被选中时,我想读取 excel 文件的数据边界表。当我使用 js 时,这成为问题,我无法解析 php 代码中的 $ _FILES。

<script type="text/javascript">
function sheetChange()
{
    var html;
    $("#sheetName td").remove();
    var fileInputContent = $('#form').serializeArray();
    $.post(basedomain+"mycontroller/readSheet",fileInputContent,function(result)
    {
       if(result)
       {
          $("#sheetName").show();
          var data = JSON.parse(result);
          html += '<td>Sheet Name</td><td colspan=''3''><select name=''SHEET'' required>';
          for(var i in data)
          {
             html += '<option value='''+data[i]+'''>'+data[i]+'</option>';
          }
          html +='</select></td>';
          $("#sheetName").append(html);
       }
     });
  }
</script>
<form id = 'form' method="post" action="upload.php" enctype="multipart/form-data">
    <table cellspacing="0" cellpadding="0">
       <tr>
           <td>Input Xls File</td>
           <td colspan="3"><input type="file" name="file" id="file" onchange="sheetChange()"/></td>
       </tr>
      <tr id="sheetName"></tr>
    </table>
</form>

PHP代码:

public function readSheet()
{
    error_reporting(E_ALL ^ E_NOTICE);
    require_once 'excel_reader2.php';
    $data = new Spreadsheet_Excel_Reader($_FILES['file']['tmp_name']); //$_FILES is null
    foreach ($data->boundsheets as $k=>$sheet)
    {
        $row[] = $sheet['name'];
    }
    echo json_encode($row);
    exit;
}

有人可以帮助我吗?提前谢谢。

原因是

使用 HTML 上传文件并不像您想象的那么简单。这里有两个很好的例子,普通的 POST 是什么样子的(在 HTTP 协议中)与多部分/表单数据请求的样子:

http://www.htmlcodetutorial.com/forms/form_enctype.html

从这里要带走的是,表单提交和带有文件上传的表单提交在技术上是两件非常不同的事情。

$.post 只能为你做正常的表单提交,jQuery 不支持文件上传。

有两种方法可以解决此问题:

  • 只需做一个简单的表单提交(更简单的方法)
  • 必须以编程方式将文件添加到请求中。如果您选择此选项,您可能会使用一个插件(尽管从未尝试过):https://github.com/blueimp/jQuery-File-Upload/wiki/How-to-submit-additional-form-data

干杯马蒂亚斯