この記事では、Ajax テクノロジーに基づいたプログレスバーを使用したファイルアップロードの実装に関する関連情報を主に紹介します。必要な方は参考にしてください。実際の Web アプリケーションまたは Web サイトの開発プロセスでは、多くの場合、ファイルのアップロード機能を実装する必要があります。ファイルのアップロード プロセス中、ユーザーは長時間待機する必要があることがよくあります。これにより、ファイルのアップロード中にアップロードの進行状況をユーザーに知らせることができます。図 1 に示すように、このインスタンスを実行し、ファイル アップロード ページにアクセスし、[参照] ボタンをクリックしてアップロードするファイルを選択します。ファイルが 50MB を超えることはできないことに注意してください。50MB を超えると、システムによってエラー プロンプトが表示されます。アップロードするファイルを選択した後、「送信」ボタンをクリックすると、ファイルがアップロードされ、アップロードの進行状況が表示されます。
2. 技術的なポイント
は、アップロードプロセス中にアップロードの進行状況を継続的に取得するために、主にオープンソースのCommon-FileUploadコンポーネントを使用してセグメント化されたファイルアップロードを実装します。 Common-FileUpload コンポーネントについては、以下で詳しく紹介します。
Common-FileUpload コンポーネントは、Apache 組織の jakarta-commons プロジェクトのサブプロジェクトです。このコンポーネントは、multipart/form-data タイプのリクエストのさまざまなフォーム フィールドを簡単に解析できます。このコンポーネントには、Common-IO と呼ばれる別のコンポーネントからのサポートが必要です。これら 2 つのコンポーネント パッケージ ファイルは、http://commons.apache.org Web サイトからダウンロードできます。
(1) アップロードオブジェクトの作成
DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory);
(2) アップロードリクエストを解析します
ファイルアップロードオブジェクトを作成した後、そのオブジェクトを使用してアップロードリクエストを解析し、すべてのフォーム項目を取得できます。ファイルアップロードオブジェクトのparseRequest()メソッドを実行します。 parseRequest() メソッドの構文構造は次のとおりです。
public List parseRequest(HttpServletRequest request) throws FileUploadException
(3) FileItem クラス
Common-FileUpload コンポーネントでは、ファイル フィールドであっても通常のフォーム フィールドであっても、これは FileItem オブジェクトとして扱われます。オブジェクトの isFormField() メソッドが true を返す場合、それは通常のフォーム フィールドであることを意味し、それ以外の場合はファイル フィールドです。ファイルアップロードを実装する場合、FileItemクラスのgetName()メソッドでアップロードしたファイルのファイル名を取得したり、getSize()メソッドでアップロードしたファイルのサイズを取得したりできます。
3. 具体的な実装
(1) request.js ファイルを作成し、そのファイル内に Ajax リクエストメソッドを記述します。
(2) 新しいファイルアップロードページのindex.jspを作成し、アップロードされたファイルの情報を取得するためのform要素とform要素を追加し、プログレスバーを表示するための とパーセントを表示するための タグのキー コードは次のとおりです:
<form enctype="multipart/form-data" method="post" action="UpLoad?action=uploadFile">
アップロードするファイルを選択してください:
注:
ファイルサイズを選択してください 50M以内で管理してください。<p id="progressBar" class="prog_border" align="left"> <img src="/static/imghwm/default1.png" data-src="images/progressBar.gif" class="lazy" style="max-width:90%" style="max-width:90%" id="imgProgress" alt="Ajaxテクノロジーに基づいたプログレスバーを備えたファイルアップロードの実装" ></p> <span id="progressPercent" style="width:40px;display:none">0%</span> <input name="Submit" type="button" value="提交" onClick="deal(this.form)"> <input name="Reset" type="reset" class="btn_grey" value="重置"></td> </form>(3) ファイルをアップロードするための新しいサーブレット実装クラス UpLpad を作成します。このクラスにメソッド UploadFile() を記述してファイルのアップロードを実装します。このメソッドでは、Common-FileUpload コンポーネントを使用してファイルをセクションごとにアップロードし、アップロードの割合を計算して、リアルタイムでセッションに保存します。
public void uploadFile(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=GBK"); request.setCharacterEncoding("GBK"); HttpSession session=request.getSession(); session.setAttribute("progressBar",0); //定义指定上传进度的Session变量 String error = ""; int maxSize=50*1024*1024; //单个上传文件大小的上限 DiskFileItemFactory factory = new DiskFileItemFactory(); //创建工厂对象 ServletFileUpload upload = new ServletFileUpload(factory); //创建一个新的文件上传对象 try { List items = upload.parseRequest(request); // 解析上传请求 Iterator itr = items.iterator(); // 枚举方法 while (itr.hasNext()) { FileItem item = (FileItem) itr.next(); //获取FileItem对象 if (!item.isFormField()) { // 判断是否为文件域 if (item.getName() != null && !item.getName().equals("")) {//是否选择了文件 long upFileSize=item.getSize(); //上传文件的大小 String fileName=item.getName(); //获取文件名 if(upFileSize>maxSize){ error="您上传的文件太大,请选择不超过50M的文件"; break; } // 此时文件暂存在服务器的内存中 File tempFile = new File(fileName); //构造文件目录临时对象 String uploadPath = this.getServletContext().getRealPath("/upload"); File file = new File(uploadPath,tempFile.getName()); InputStream is=item.getInputStream(); int buffer=1024; //定义缓冲区的大小 int length=0; byte[] b=new byte[buffer]; double percent=0; FileOutputStream fos=new FileOutputStream(file); while((length=is.read(b))!=-1){ percent+=length/(double)upFileSize*100D; //计算上传文件的百分比 fos.write(b,0,length); //向文件输出流写读取的数据 session.setAttribute("progressBar",Math.round(percent)); } fos.close(); Thread.sleep(1000); //线程休眠1秒 } else { error="没有选择上传文件!"; } } } } catch (Exception e) { e.printStackTrace(); error = "上传文件出现错误:" + e.getMessage(); } if (!"".equals(error)) { request.setAttribute("error", error); request.getRequestDispatcher("error.jsp").forward(request, response); }else { request.setAttribute("result", "文件上传成功!"); request.getRequestDispatcher("upFile_deal.jsp").forward(request, response); } }
(4) ファイルアップロードページのindex.jspに、記述したAjaxリクエストメソッドのrequest.jsファイルをインポートし、アップロードを取得するAjaxリクエストメソッドとAjaxコールバック関数を記述します。キーコードは次のとおりです:
<script language="javascript" src="js/request.js"></script> <script language="javascript"> var request = false; function getProgress(){ var url="showProgress.jsp"; //服务器地址 var param ="nocache="+new Date().getTime(); //每次请求URL参数都不同 ,避免上传时进度条不动 request=httpRequest("post",url,true,callbackFunc,param); //调用请求方法 } //Ajax回调函数 function callbackFunc(){ if( request.readyState==4 ){ //判断响应是否完成 if( request.status == 200 ){ //判断响应是否成功 var h = request.responseText; //获得返回的响应数据,该数据位上传进度百分比 h=h.replace(/\s/g,""); //去除字符串中的Unicode空白符 document.getElementById("progressPercent").style.display=""; //显示百分比 progressPercent.innerHTML=h+"%"; //显示完成的百分比 document.getElementById("progressBar").style.display="block"; //显示进度条 document.getElementById("imgProgress").width=h*(235/100); //显示完成的进度 } } } </script>
(5) showProgress.jsp ページを作成し、このページに EL 式を適用して、セッション ドメインに保存されているアップロード進行状況バーの値を出力します。具体的なコードは次のとおりです。
<%@page contentType="text/html" pageEncoding="GBK"%> ${progressBar}
(6) フォーム送信を記述する ボタンの onclick イベントによって呼び出される JavaScript メソッドは、最新の情報を取得するために window オブジェクトの setInterval() メソッドを通じて定期的にサーバーに要求します。アップロードの進行状況は次のとおりです:
function deal(form){ form.submit(); //提交表单 timer=window.setInterval("getProgress()",500); //每隔500毫秒获取一次上传进度 }
上記は私がまとめたものです。今後、皆様のお役に立てれば幸いです。
関連記事:
AjaxのreadyStateとステータスに関連する問題について議論する
$.Ajax()メソッドパラメータの包括的な分析(グラフィックチュートリアル)以上がAjaxテクノロジーに基づいたプログレスバーを備えたファイルアップロードの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptはブラウザとnode.js環境で実行され、JavaScriptエンジンに依存してコードを解析および実行します。 1)解析段階で抽象的構文ツリー(AST)を生成します。 2)ASTをコンパイル段階のバイトコードまたはマシンコードに変換します。 3)実行段階でコンパイルされたコードを実行します。

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版
中国語版、とても使いやすい

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









