使用 jquery post 上传 PHP 文件

Posted

技术标签:

【中文标题】使用 jquery post 上传 PHP 文件【英文标题】:PHP file-upload using jquery post 【发布时间】:2012-06-18 06:54:56 【问题描述】:

如果有人知道这段代码有什么问题,请告诉我。

基本上我想使用 jQuery 上传文件

<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>

  <script type="text/javascript">
    $(document).ready(function(event) 
      $('#form1').submit(function(event) 
        event.preventDefault();
        $.post('post.php',function(data)
           $('#result').html(data);
        );
      );
    );
  </script>  
</head>
<body>
<form id="form1">
  <h3>Please input the XML:</h3>
  <input id="file" type="file" name="file" /><br/>
  <input id="submit" type="submit" value="Upload File"/>
</form>

<div id="result">call back result will appear here</div>

</body>
</html>

还有我的 php 'post.php'

<?php
  echo $file['tmp_name'];
?>

上传的文件名没有返回。问题是我无法访问上传的文件。

提前致谢! 湿婆

【问题讨论】:

【参考方案1】:

不不不,您应该使用 jQuery 表单插件来异步上传文件。您不能使用 jQuery $.post 方法上传文件。该文件将使用隐藏的 iframe 上传

另一种方法是通过 FileAPI/BlobApi 使用 HTML5 上传

【讨论】:

谢谢伙计!现在,我将只使用普通的 html 表单提交而不是 jquery post。这样,它对我有用!【参考方案2】:

基本上我想使用 jQuery 上传文件

您不能使用 AJAX 上传文件。您可以使用使用隐藏 iframe 的 jquery.form 插件:

<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script src="http://malsup.github.com/jquery.form.js"></script>
    <script type="text/javascript">
        $(document).ready(function(event) 
            $('#form1').ajaxForm(function(data) 
                $('#result').html(data);
            );
        );
  </script>  
</head>
<body>
<form id="form1" action="post.php" method="post" enctype="multipart/form-data">
    <h3>Please input the XML:</h3>
    <input id="file" type="file" name="file" /><br/>
    <input id="submit" type="submit" value="Upload File"/>
</form>

<div id="result">call back result will appear here</div>

</body>
</html>

还要注意表单上的enctype="multipart/form-data"

另一种可能性是使用HTML5 File API,假设客户端浏览器支持它,您可以实现它。

【讨论】:

你的意思是不能使用 AJAX 上传文件还是不能使用 jQuery 的 post() 方法上传文件?【参考方案3】:

尝试使用 iframe 上传,因为您无法使用 $.post 方法发送文件。

【讨论】:

【参考方案4】:

你也可以试试 jquery uploadify - http://www.uploadify.com/

【讨论】:

当浏览器有 API 时,为什么还要使用外部库? 因为我们很久以前就在谈论上传文件,我会说一个世纪或更长时间的新技术开发。当我提出没有 html5 或者它刚刚开始并且除了纯 html 之外的任何东西都需要 Flash 时(大多数情况下)。 Uploadify 在那个时候是相当不错的库,除其他功能外,它还提供进度条、多个文件上传、拖放,如果我没记错的话,它是基于 jquery 的。【参考方案5】:

用 jQuery $.post 无法上传文件,尽管如此,使用文件 API 和 XMLHttpRequest,完全可以用 AJAX 上传文件,你甚至可以知道已经上传了多少数据......

$('input').change(function() 

    var fileInput = document.querySelector('#file');

    var xhr = new XMLHttpRequest();
    xhr.open('POST', '/upload/');

    xhr.upload.onprogress = function(e) 
    
        /* 
        * values that indicate the progression
        * e.loaded
        * e.total
        */
    ;

    xhr.onload = function()
    
        alert('upload complete');
    ;

    // upload success
    if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
    
        // if your server sends a message on upload sucess, 
        // get it with xhr.responseText
        alert(xhr.responseText);
    

    var form = new FormData();
    form.append('title', this.files[0].name);
    form.append('pict', fileInput.files[0]);

    xhr.send(form);

【讨论】:

遗憾的是,对 XHR2 的支持还不够好。但是感谢您对此的投入,我已经设法通过使用该方法对 Zepto 和一些模拟数据进行了完全有效的测试。 当前所有主流浏览器版本都支持它(甚至 IE 10+)。 caniuse.com/xhr2【参考方案6】:

你的upload.php有一些错误。

你应该改变你的这部分。

echo $file['tmp_name'];

到:-

echo $_FILES['file']['tmp_name'];

【讨论】:

以上是关于使用 jquery post 上传 PHP 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Javascript FormData()、AJAX $.post 和 PHP 的简单文件上传

jquery的post方法上传文件问题。

如何使用 jQuery 获取上传输入的“值”

使用javascript将视频上传到facebook,无需php

使用 jquery AJAX 和 FormData 上传文件

Jquery 文件上传器