HTML5 + jQuery + PHPを使用してサーバーに画像をアップロードする

良い一日!



WPエンジンでは、デスクトップからブラウザーウィンドウにファイルを転送し、それらをサーバーにアップロードする機能が多くの人に見られました。 これを見たとき、私はそれがどのように組織されているのだろうと思いました。 それから私はジャングルに登りました、私はほとんど迷子になりましたが、まだ解決策を見つけました。 すべてが非常にシンプルであることがわかりました。



何が必要ですか?



HTML5 + jQuery + PHPの少しの知識。



さあ、行きましょう。





最初に、ミニアプリケーションの作業を記述します。



1)ユーザーは自分のPCで1つ以上のファイル(この場合は画像ファイル)を選択し、これらのファイルをドラッグアンドドロップAPIをサポートするブラウザーウィンドウにドラッグします(より正確には、ユーザーはダウンロードのために指定された場所にファイルを転送します)。

2)この後、イベントがトリガーされ、APIを使用して、ダウンロードしたファイルに関する情報を取得し、一時メモリに保存します。

3)次に、XMLHttpRequestオブジェクトのsendAsBinaryを送信する新しいメソッドを使用して、一時メモリからサーバーにファイルを送信します。



おそらく上記は完全に明確ではありませんが、今では誰もがすべてを理解するでしょう。



車輪を再発明するのではなく、jQuery FileDropプラグインを使用してください。 しかし、自転車を発明しなかったため、欠点が1つあります。このプラグインは、FirefoxおよびChromeブラウザーでのみ機能します。 これは驚くべきことではありません。HTML5を使用してアプリケーションを記述しているため、すべての主要なブラウザーがまだそれをサポートしているわけではないからです。 しかし、これにこだわるつもりはありません。



index.htmlファイルを作成します

このコンテンツでは:

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>    Drag & Drop API.</title> <link rel="stylesheet" href="css/styles.css" /> </head> <body> <!--          --> <div id="dropbox"> <!--             --> <span class="message">    </span> </div> <!--   jQuery --> <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> <!--   FileDrop --> <script src="js/jquery.filedrop.js"></script> <!--      js     --> <script src="js/script.js"></script> </body> </html>
      
      







さらに進む..



ここで、 FileDropプラグインとjQueryライブラリアクションを組み合わせたハンドラーを作成し、小さな制限を作成します。

 $(function(){ var dropbox = $('#dropbox'), message = $('.message', dropbox); dropbox.filedrop({ paramname:'pic', maxfiles: 5, maxfilesize: 2, url: 'post_file.php', uploadFinished:function(i,file,response){ $.data(file).addClass('done'); }, error: function(err, file) { switch(err) { case 'BrowserNotSupported': showMessage('    HTML5!'); break; case 'TooManyFiles': alert('   1    5 '); break; case 'FileTooLarge': alert(file.name+'  .     2.'); break; default: break; } }, beforeEach: function(file){ if(!file.type.match(/^image\//)){ alert('   !!!!'); return false; } }, uploadStarted:function(i, file, len){ createImage(file); }, progressUpdated: function(i, file, progress) { $.data(file).find('.progress').width(progress); } }); var template = '<div class="preview">'+ '<span class="imageHolder">'+ '<img />'+ '<span class="uploaded"></span>'+ '</span>'+ '<div class="progressHolder">'+ '<div class="progress"></div>'+ '</div>'+ '</div>'; function createImage(file){ var preview = $(template), image = $('img', preview); var reader = new FileReader(); image.width = 100; image.height = 100; reader.onload = function(e){ image.attr('src',e.target.result); }; reader.readAsDataURL(file); message.hide(); preview.appendTo(dropbox); $.data(file,preview); } function showMessage(msg){ message.html(msg); } });
      
      







さて、アプリケーションを作成し、styles.cssファイルを作成して実行します(ソースコードと共にアーカイブに配置されます)。



これで、クライアント部分で終わり、サーバー部分に進みます。

小さなPHPハンドラーを作成しましょう。

 <?php //    function exit_status($str){ echo json_encode(array('status'=>$str)); exit; } function get_extension($file_name){ $ext = explode('.', $file_name); $ext = array_pop($ext); return strtolower($ext); } $upload_dir = 'uploads/'; //     $allowed_ext = array('jpg','jpeg','png','gif'); //   if(strtolower($_SERVER['REQUEST_METHOD']) != 'post'){ exit_status('     !'); } if(array_key_exists('pic',$_FILES) && $_FILES['pic']['error'] == 0 ){ $pic = $_FILES['pic']; if(!in_array(get_extension($pic['name']),$allowed_ext)){ exit_status('   : '.implode(',',$allowed_ext)); } //           ,       if(move_uploaded_file($pic['tmp_name'], $upload_dir.$pic['name'])){ exit_status('   !'); } } exit_status('    '); ?>
      
      





これですべてです! 次に、ローカルサーバーを起動し、サイトを開いてテストします。 次のようになります。

1)ブラウザページを開くだけ



2)最初のファイルをダウンロードする



3)2番目のファイルをダウンロードする



4)6個のファイルをダウンロードする





それだけです アップロードフォルダを確認すると、その中にダウンロードされたすべての画像が表示されます。



ソースはこちら

デモ版はこちら

ご清聴ありがとうございました!



PS。 目標として、サーバーにファイルをアップロードしてさらに表示するための完全に機能するアプリケーションを作成するというタスクを自分で設定しませんでした。 そして、かなり新しいロード方法をデモンストレーションしたかっただけで、多くの人にとって興味深いものだったと思います。



All Articles