ajax php上传文件,上传百分比

时间:2011-05-02 18:53:30

标签: php javascript ajax upload

我使用iframe进行简单的ajax上传表单。我想要的是,加载消息显示< div id="message"></div>

中的上传百分比

这是我的javascript

function start_Uploading(){
      document.getElementById('message').innerHTML = 'Uploading...';
      return true;
}

function stopUpload(success)
    {
      var result = '';
      if (success == 1)
        document.getElementById('message').innerHTML = 'Success';
      else 
         document.getElementById('message').innerHTML = 'Failed';
    }

这是表格

< div id="message"><br/></div>
< form action="upload.php" method="post" enctype="multipart/form-data" target="upload_target" onsubmit="start_Uploading();" >
    File:< input name="myfile" type="file" size="30" />
    < input type="submit" name="submitBtn" value="Upload" />
    < br/>< iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>
</form>

和服务器端 upload.php 文件是

$destination_path = getcwd().DIRECTORY_SEPARATOR;
   $result = 0;
   $target_path = $destination_path . basename( $_FILES['myfile']['name']);
   if(@move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path))
      $result = 1;
   sleep(1);
   echo "<script language=\"javascript\" type=\"text/javascript\">window.top.window.stopUpload($result);</script>";

4 个答案:

答案 0 :(得分:3)

两件事:

  1. 使用Javascript
  2. 使用APC
  3. <强>使用Javascript:

    You can use plupload (http://www.plupload.com/) 
    - pretty good multiple file uploader
    
    Pretty decent JS plugin for uploading files in PHP in two methods, 
    1. normal upload 
    2. chunk based uploading.
    

    限制/假设:

    1. Flash Plugin - in the browser
    2. Session problem - since it's flash, a different session's are created for 
       each file upload.
    

    <强> APC / PHP

    使用APC - 您可以自己创建一个进度条。

    限制/假设:

    1. Install APC on the server - using PECL (pecl install APC)
    2. Write a separate code to get the status of upload.
    

    代码:

    getprogress.php

    <?php
    if(isset($_GET['progress_key'])) {
    
    $status = apc_fetch('upload_'.$_GET['progress_key']);
    echo $status['current']/$status['total']*100;
    
    }
    ?>
    

    upload.php的

    <?php
    $id = uniqid("");
    ?>
    <html>
    <head><title>Upload Example</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    </head>
    <body>
    
    <script type="text/javascript">
    function getProgress(){
    $.get("getprogress.php?progress_key=<?php echo($id)?>", 
               function(percent) {
                   document.getElementById("progressinner").style.width = percent+"%";
                   if (percent < 100){
                        setTimeout("getProgress()", 100);
                   }
               });
    
    }
    
    function startProgress(){
       document.getElementById("progressouter").style.display="block";
       setTimeout("getProgress()", 1000);
    }
    
    </script>
    
    <iframe id="theframe" name="theframe" 
        src="fileupload.php?id=<?php echo($id) ?>" 
        style="border: none; height: 100px; width: 400px;" > 
    </iframe>
    <br/><br/>
    
    <div id="progressouter" style="width: 500px; height: 20px; border: 6px solid red; display:none;">
    <div id="progressinner" style="position: relative; height: 20px; background-color: purple; width: 0%; ">
    </div>
    </div>
    
    </body>
    </html>
    

    fileupload.php

    <?php
    $id = $_GET['id'];
    ?>
    
    <form enctype="multipart/form-data" id="upload_form" 
      action="target.php" method="POST">
    
    <input type="hidden" name="APC_UPLOAD_PROGRESS" 
       id="progress_key"  value="<?php echo $id?>"/>
    
    <input type="file" id="test_file" name="test_file"/><br/>
    
    <input onclick="window.parent.startProgress(); return true;"
    type="submit" value="Upload!"/>
    
    </form>
    

答案 1 :(得分:2)

Here是使用PHP w / Ajax基于服务器端检查上载期间正在写入的文件的文件大小来取得进展的示例解决方案:

答案 2 :(得分:0)

也许这会让你感兴趣here

答案 3 :(得分:0)

来自http://www.matlus.com/html5-file-upload-with-progress/

function uploadFile() {
        var fd = new FormData();
        fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]);
        var xhr = new XMLHttpRequest();
        xhr.upload.addEventListener("progress", uploadProgress, false);
        xhr.open("POST", "UploadMinimal.aspx");
        xhr.send(fd);
      }

      function uploadProgress(evt) {
        if (evt.lengthComputable) {
          var percentComplete = Math.round(evt.loaded * 100 / evt.total);
          document.getElementById('progressNumber').innerHTML = percentComplete.toString() + '%';
        }

您将在<div id="progressNumber"></div>

中获得结果