モバイルでのHTML5経由のファイルアップロード

モバイルでのHTML5経由のファイルアップロード

ほとんどの場合、PC でファイルをアップロードするにはプラグインが使用され、フラッシュが導入されても問題ありません。ただし、モバイル端末でさまざまな冗長プラグインがまだ使用されている場合は、批判される可能性があります。プロジェクトには、写真をアップロードする機能が必要です。H5 にはすでに関連するインターフェイスがあり、互換性も優れているため、もちろん H5 に優先的に実装されます。

使用される主なテクノロジーは次のとおりです。

アヤックス

ファイルリーダー

フォームデータ

HTML構造:

XML/HTML コードコンテンツをクリップボードにコピー
  1. < div  クラス= "カメラ領域" >   
  2.        <フォーム  enctype = "マルチパート/フォームデータ"  メソッド= "投稿" >   
  3.          <入力 タイプ= "ファイル"  名前= "アップロードするファイル"  クラス= "fileToUpload"   accept = "画像/*"  キャプチャ= "カメラ" />   
  4.            < div  クラス= "アップロード進行状況" > < span > </ span > </ div >   
  5.          </フォーム>   
  6.        < div  クラス= "thumb" > </ div >   
  7.    </div>   
  8.   

パッケージ化されたupload.jsはzeptoに依存します

JavaScriptコードコンテンツをクリップボードにコピー
  1. (関数($) {
  2. $.extend($.fn, {
  3. fileUpload:関数(opts) {
  4.       この.each(関数(){
  5.          var $self = $( this );
  6.          var DOM = {
  7.            "アップロードするファイル" : $self.find( ".アップロードするファイル" ),
  8.            "親指" : $self.find( ".親指" ),
  9.            「進捗状況」 : $self.find( ".upload-progress" )
  10. };
  11.          var funs = {
  12.            // ファイルを選択し、ファイル サイズを取得します。ここでファイル形式を取得して、ユーザーが必須でない形式でファイルをアップロードできないように制限することもできます。   
  13.            "fileSelected" :関数() {
  14.              varファイル = (doms.fileToUpload)[0].files;
  15.              var count = ファイル数.長さ;
  16.              ( var index = 0; index < count; index++) {
  17.                varファイル = ファイル[インデックス];
  18.                varファイルサイズ = 0;
  19.               ファイルサイズが 1024 * 1024 より大きい場合
  20. ファイルサイズ = (Math.round(ファイルサイズ * 100 / (1024 * 1024)) / 100).toString() + 'MB' ;
  21.               それ以外  
  22. ファイルサイズ = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB' ;
  23. }
  24. funs.uploadFile();
  25. },
  26.            // ファイルを非同期でアップロードする  
  27. アップロードファイル:関数() {
  28.              var fd = new FormData(); //フォームデータオブジェクトを作成する  
  29.              varファイル = (doms.fileToUpload)[0].files;
  30.              var count = ファイル数.長さ;
  31.              ( var index = 0; index < count; index++) {
  32.                varファイル = ファイル[インデックス];
  33. fd.append(opts.file, file); //フォームデータにファイルを追加する  
  34. funs.previewImage(file); //アップロードする前に画像をプレビューします。他の方法でtxtファイルをプレビューすることもできます。   
  35. }
  36.              var xhr =新しいXMLHttpRequest();
  37. xhr.upload.addEventListener( "progress" , funs.uploadProgress, false ); //アップロードの進行状況を監視する  
  38. xhr.addEventListener( "load" 、 funs.uploadComplete 、 false );
  39. xhr.addEventListener( "エラー" 、 opts.uploadFailed、 false );
  40. xhr.open( "POST" 、opts.url);
  41. xhr.send(fd);
  42. },
  43.            //ファイルプレビュー  
  44. previewImage:関数(ファイル) {
  45.              varギャラリー = doms.thumb;
  46.              var img = document.createElement( "img" );
  47. img.file = ファイル;
  48. 画像サイズ
  49.              // FileReaderメソッドを使用して画像コンテンツを表示します  
  50.              varリーダー =新しいFileReader();
  51. reader.onload = (関数(aImg) {
  52.               戻る 関数(e) {
  53. aImg.src = e.target.result;
  54. };
  55. })(画像);
  56. reader.readAsDataURL(ファイル);
  57. },
  58. アップロード進捗状況:関数(evt) {
  59.              (evt.lengthComputable)の場合{
  60.                var percentComplete = Math.round(evt.loaded * 100 / evt.total);
  61. doms.progress.html(パーセント完了.toString() + '%' );
  62. }
  63. },
  64.            「アップロード完了」 :関数(evt) {
  65. アラート(evt.target.responseText)
  66. }
  67. };
  68. doms.fileToUpload.on( "変更" 関数() {
  69. doms.progress.find( "span" ).width( "0" );
  70. funs.fileSelected();
  71. });
  72. });
  73. }
  74. });
  75. })(ゼプト);

呼び出し方法:

JavaScriptコードコンテンツをクリップボードにコピー
  1. $( ".camera-area" ).fileUpload({
  2.          「url」 : 「savetofile.php」
  3.          "ファイル" : "myFile"   
  4. });

PHP部分:

PHPコードコンテンツをクリップボードにコピー
  1. <?php
  2. if (isset( $_FILES [ 'myFile' ])) {
  3.      // 例:   
  4. ログを書き込みます( $_FILES );
  5. move_uploaded_file( $_FILES [ 'myFile' ][ 'tmp_name' ], "uploads/" . $_FILES [ 'myFile' ][ 'name' ]);
  6.     エコー  '成功' ;
  7. }
  8. 関数writeLog( $log ){
  9.      if ( is_array ( $log ) || is_object ( $log )){
  10.          $log = json_encode( $log );
  11. }
  12.      $log = $log . "\r\n" ;
  13.   
  14.      file_put_contents ( 'log.log' $log 、 FILE_APPEND );
  15. }
  16. ?>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。

原文: http://www.cnblogs.com/hutuzhu/p/5254532.html

<<:  webpack イメージを base64 に変換する例

>>:  MySQLコマンドプロンプトで入力エラーが発生したときに前のコマンドを修正する方法

推薦する

react+reduxを使用してカウンター機能を実装すると発生する問題

Redux はシンプルな状態マネージャーです。その歴史をたどることはしません。使用法の観点から見ると...

TypeScript インターフェース定義ケースチュートリアル

インターフェースの役割:インターフェース (英語: interface) の機能は、簡単に言えば、コ...

Mybatis マッパー動的プロキシの原理の分析

序文動的プロキシの原理を説明する前に、まず、mybatis を統合した後の dao 層の 2 つの実...

nginx の 2 つのモジュールの proxy_pass の違い

1. 1.ngx_stream_proxy_moduleモジュールのproxy_passディレクティ...

閲覧時に作成されたWebページの下部にある余分な空白スペースを削除する方法

Dreamweaver または FrontPage を使用して HTML Web ページを作成する場...

JS初心者が配列を処理するための実践的な方法のまとめ

join() メソッド: 指定された区切り文字を使用して配列内のすべての要素を文字列に接続します。例...

TinyEditorはシンプルで使いやすいHTML WYSIWYGエディタです

数日前、国産の XHTML エディタを紹介しました。今日は、有名な海外の Web デザイン ブログl...

Vue 初心者ガイド: 環境の構築と開始方法

目次初期ビューVue開発環境の構築Vueインスタンスの作成Vue テンプレート構文Vue データバイ...

Linux のリンク解除機能とファイルの削除方法

1. リンク解除機能ハード リンクの場合、unlink はディレクトリ エントリを削除し、inode...

Vue3のいくつかの利点についての簡単な説明

目次1. ソースコード1.1 モノレポ1.2 タイプスクリプト2. パフォーマンス2.1 ソースコー...

NavicatでMySqlスケジュールタスクを作成する方法の詳細な説明

Navicat で MySql スケジュールタスクを作成する詳細な説明イベントは、MySQL が特定...

MySQL バイナリログデータ復旧: 誤ってデータベースを削除した場合の詳細な説明

MySQL Binログデータの回復: 誤ってデータベースを削除した場合前書き: テスト マシンで誤っ...

uniappを使用してWeChatミニプログラムでEChartsを使用する方法

今日は、uniapp を使用して Echarts を統合し、マップ チャートを表示します。 mpvu...

Vueのレスポンシブシステムの原理の詳細な説明

目次Vueのレスポンシブシステムの基本原則1. Object.definePropertyの使い方を...

Apache Log4j2 が核レベルの脆弱性と迅速な修正を報告

Apache Log4j2 が核レベルの脆弱性を報告し、スタックリーダーの友人たちは大騒ぎになりまし...