ホームページ  >  記事  >  ウェブフロントエンド  >  Ajax アップロード ファイルの進行状況バー Codular

Ajax アップロード ファイルの進行状況バー Codular

亚连
亚连オリジナル
2018-05-22 14:49:101415ブラウズ

この記事では主に Ajax アップロード ファイル プログレス バー Codular の関連情報を紹介します。必要な友人はそれを参照してください。

現在、人々は Web ページを離れることなく Web を閲覧しながら他のことを行うことを好みます。これは通常、Ajax を通じて実現されます。 . ほとんどの場合、これを実現するために jQuery を使用しますが、ブラウザの進歩により、ページを離れることなくサーバーにファイルをアップロードする方法を紹介します。前に行ったものと同じ方法です。この記事で使用したのと同じバックエンド PHP コードを使用して、ファイルをサーバーにアップロードし、アップロードの進行状況を表示し、場合によっては、アップロードされたファイルのリンク アドレスを返します。アップロードされたファイルの ID またはその他のアプリケーション情報を返すため、注: このコードは古い IE ブラウザーをサポートしていません。IE10+ のみをサポートしています

まず HTML 構造から始めます。 JavaScript と、PHP コードが提供されます。この部分は前のチュートリアルから改変されたものです。PHP コードについてはあまり説明しません。

HTML

2 つの入力ボックスを使用するだけで済みます。1 つはファイル タイプ ファイルで、もう 1 つは単なるボタン ボタンであり、ファイル アップロード リクエストを送信するためにクリックされるのをリッスンできます。 また、アップロードのステータスを強調表示するために幅を変更する p もあります。

以下に示すように:

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS File Upload with Progress</title>
  <style>
  .container {
    width: 500px;
    margin: 0 auto;
  }
  .progress_outer {
    border: 1px solid #000;
  }
  .progress {
    width: 20%;
    background: #DEDEDE;
    height: 20px; 
  }
  </style>
</head>
<body>
  <p class=&#39;container&#39;>
    <p>
      Select File: <input type=&#39;file&#39; id=&#39;_file&#39;> <input type=&#39;button&#39; id=&#39;_submit&#39; value=&#39;Upload!&#39;>
    </p>
    <p class=&#39;progress_outer&#39;>
      <p id=&#39;_progress&#39; class=&#39;progress&#39;></p>
    </p>
  </p>
  <script src=&#39;upload.js&#39;></script>
</body>
</html>

小さな進行状況バーのスタイルを記述し、ファイルのアップロードと進行状況バーの表示を処理するスクリプト ファイルを下部に追加したことがわかります。

JavaScript

まず、以下を取得する必要があります。使用されるタグはすでに ID でマークされています

var _submit = document.getElementById(&#39;_submit&#39;), 
_file = document.getElementById(&#39;_file&#39;), 
_progress = document.getElementById(&#39;_progress&#39;);

次に、クリック イベントを _submit に追加して、選択したファイルをアップロードします。これを行うには、addEventListener メソッドを使用し、クリック後にアップロード メソッドを呼び出します。ボタン .

_submit.addEventListener(&#39;click&#39;, upload);

これでアップロードの処理を続行できます。次の手順があります:

選択したファイルを確認します
  1. 送信するファイルデータを動的に作成します
  2. js
  3. を介してXMLHttpRequestを作成します
  4. ファイルをアップロードします
  5. 選択したファイルを確認します

ファイル入力box_fileには、選択したファイルキューをクエリするためのパラメータファイルがあります。複数のパラメータを設定すると、複数のファイルを選択できます。チェックして判断し、配列の長さが 0 より大きい場合は続行し、それ以外の場合は直接戻ります。

if(_file.files.length === 0){
  return;
}

これで、ファイルが選択されていることを確認できます。ファイルが存在すると仮定します。インデックスが存在することを覚えておいてください。

動的作成 送信するファイルデータ

このためには、FormData を使用してそれにデータを追加する必要があります。次に、手順 3 で生成されたリクエストで FormData を送信できます。私たちが使用する append メソッド、最初のパラメーター 入力ボックスの name 属性と同様に、2 番目のパラメーターは値です。ここでは、選択した最初のファイルに値を設定します。

var data = new FormData();
data.append(&#39;SelectedFile&#39;, _file.files[0]);

データをサーバーに送信するときにこれを使用します。

アップロード スクリプトを通じて XMLHttpRequest を作成します

この部分は非常に基本的なもので、リクエストのステータスが変化したときにコールバック関数を定義するための新しい 値を作成します。このメソッドはステータスが変化したときに readyState をチェックして、値は必要なものです - この例では 4 です。これはリクエストが完了したことを意味します

2 番目のステップでは、アップロードの進行状況を取得して使用できます。

var request = new XMLHttpRequest();
request.onreadystatechange = function(){
  if(request.readyState == 4){
    try {
      var resp = JSON.parse(request.response);
    } catch (e){
      var resp = {
        status: &#39;error&#39;,
        data: &#39;Unknown error occurred: [&#39; + request.responseText + &#39;]&#39;
      };
    }
    console.log(resp.status + &#39;: &#39; + resp.data);
  }
};
XMLHttpRequest,并设置一些设置。首先我们将修改onreadystatechangeリクエストが成功したら、try...catch を使用して戻り値を解析するプロセスをラップします。解析が失敗した場合は、後続のコードが実行されるように独自の戻りオブジェクトを作成します。エラーを報告しません。戻り値を処理する方法を決定できます。ここではコンソールに出力されます。

次に、プログレスバーを扱います。

request.upload.addEventListener(&#39;progress&#39;, function(e){
  _progress.style.width = Math.ceil(e.loaded/e.total) * 100 + &#39;%&#39;;
}, false);

ここでは少し複雑です。イベント オブジェクトには、より重要な 2 つの属性があり、サーバーにアップロードされた値を示します。Total は、これら 2 つに基づいて割合を計算できます。値を使用して進行状況バーの幅を設定します。注: ここではアニメーション効果は追加されませんが、必要に応じてカスタマイズできます。アニメーション効果。

ファイルをアップロードしています

これでリクエストを送信できます。

request.open(&#39;POST&#39;, &#39;upload.php&#39;);
request.send(data);
完全な JavaScript コードを以下に示します:

var _submit = document.getElementById(&#39;_submit&#39;), 
_file = document.getElementById(&#39;_file&#39;), 
_progress = document.getElementById(&#39;_progress&#39;);
var upload = function(){
  if(_file.files.length === 0){
    return;
  }
  var data = new FormData();
  data.append('SelectedFile', _file.files[0]);
  var request = new XMLHttpRequest();
  request.onreadystatechange = function(){
    if(request.readyState == 4){
      try {
        var resp = JSON.parse(request.response);
      } catch (e){
        var resp = {
          status: 'error',
          data: 'Unknown error occurred: [' + request.responseText + ']'
        };
      }
      console.log(resp.status + ': ' + resp.data);
    }
  };
  request.upload.addEventListener('progress', function(e){
    _progress.style.width = Math.ceil(e.loaded/e.total) * 100 + '%';
  }, false);
  request.open('POST', 'upload.php');
  request.send(data);
}
_submit.addEventListener(&#39;click&#39;, upload);

PHP に...

PHP

これは私たちが使用しているコードです。いくつかの違いに気づくでしょう。主に上部で JSON メソッドを使用しています。戻り値は JSON 形式で出力されます。この PHP は、これは、このメソッドが 500Kb 未満の PNG 画像にのみ適用できることを意味します。さらに、成功メッセージはアップロードされたファイルのパスを返します:

<?php
// Output JSON
function outputJSON($msg, $status = &#39;error&#39;){
  header(&#39;Content-Type: application/json&#39;);
  die(json_encode(array(
    &#39;data&#39; => $msg,
    &#39;status&#39; => $status
  )));
}
// Check for errors
if($_FILES[&#39;SelectedFile&#39;][&#39;error&#39;] > 0){
  outputJSON(&#39;An error ocurred when uploading.&#39;);
}
if(!getimagesize($_FILES[&#39;SelectedFile&#39;][&#39;tmp_name&#39;])){
  outputJSON(&#39;Please ensure you are uploading an image.&#39;);
}
// Check filetype
if($_FILES[&#39;SelectedFile&#39;][&#39;type&#39;] != &#39;image/png&#39;){
  outputJSON(&#39;Unsupported filetype uploaded.&#39;);
}
// Check filesize
if($_FILES[&#39;SelectedFile&#39;][&#39;size&#39;] > 500000){
  outputJSON(&#39;File uploaded exceeds maximum upload size.&#39;);
}
// Check if the file exists
if(file_exists(&#39;upload/&#39; . $_FILES[&#39;SelectedFile&#39;][&#39;name&#39;])){
  outputJSON(&#39;File with that name already exists.&#39;);
}
// Upload file
if(!move_uploaded_file($_FILES[&#39;SelectedFile&#39;][&#39;tmp_name&#39;], &#39;upload/&#39; . $_FILES[&#39;SelectedFile&#39;][&#39;name&#39;])){
  outputJSON(&#39;Error uploading file - check destination is writeable.&#39;);
}
// Success!
outputJSON(&#39;File uploaded successfully to "&#39; . &#39;upload/&#39; . $_FILES[&#39;SelectedFile&#39;][&#39;name&#39;] . &#39;".&#39;, &#39;success&#39;);
上記は私が皆さんのためにまとめたものです。将来すべての人に役立ちます。

関連記事:

Ajax フォーム送信と Ajax パラメーター受け渡しメソッドを検証するための jQuery Validator メソッド (画像とテキストのチュートリアル)

Ajax非同期リクエスト技術事例解説

Ajaxクロスドメインリクエストの原理(画像とテキストチュートリアル)

以上がAjax アップロード ファイルの進行状況バー Codularの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。