За последние 24 часа нас посетили 16911 программистов и 1291 робот. Сейчас ищут 1474 программиста ...

Ajax загрузка файлов

Тема в разделе "JavaScript и AJAX", создана пользователем donvasin, 28 июн 2014.

  1. donvasin

    donvasin Новичок

    С нами с:
    29 апр 2014
    Сообщения:
    25
    Симпатии:
    0
    Есть код, которые после перетаскивания файла на DIV закачивает его на сервак.
    Как сделать, чтобы после выбора через «Выбор файла» выполнялась такая же функция, как через drag'n'drop?
    Input и onChange уже сделал. Но надо заставить работать.

    Видимо, надо привязать события onChange к input, только не знаю, в каком формате надо передавать переменную files.
    Спасибо!

    Код (Text):
    1. <html>
    2. <head>
    3. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    4. <style>
    5. #dragandrophandler
    6. {
    7. position: relative;
    8. border:2px dotted #ccc;
    9. width:640px;
    10. height: 353px;
    11. color:#92AAB0;
    12. text-align:left;vertical-align:middle;
    13. padding:10px 10px 10 10px;
    14. margin: 180px auto 10px auto;
    15. font-size:200%;
    16. border-radius: 5px;
    17. }
    18. .progressBar {
    19.     width: 200px;
    20.     height: 22px;
    21.     border: 1px solid #ddd;
    22.     border-radius: 5px;
    23.     overflow: hidden;
    24.     display:inline-block;
    25.     margin:0px 10px 5px 5px;
    26.     vertical-align:top;
    27. }
    28.  
    29. .progressBar div {
    30.     height: 100%;
    31.     color: #fff;
    32.     text-align: right;
    33.     line-height: 22px; /* same as #progressBar height if we want text middle aligned */
    34.     width: 0;
    35.     background-color: #0ba1b5; border-radius: 3px;
    36. }
    37. .statusbar
    38. {
    39.     border-top:1px solid #A9CCD1;
    40.     min-height:25px;
    41.     width:700px;
    42.     padding:10px 10px 0px 10px;
    43.     vertical-align:top;
    44. }
    45. .statusbar:nth-child(odd){
    46.     background:#EBEFF0;
    47. }
    48. .filename
    49. {
    50. display:inline-block;
    51. vertical-align:top;
    52. width:250px;
    53. }
    54. .filesize
    55. {
    56. display:inline-block;
    57. vertical-align:top;
    58. color:#30693D;
    59. width:100px;
    60. margin-left:10px;
    61. margin-right:5px;
    62. }
    63. .abort{
    64.     background-color:#A8352F;
    65.     -moz-border-radius:4px;
    66.     -webkit-border-radius:4px;
    67.     border-radius:4px;display:inline-block;
    68.     color:#fff;
    69.     font-family:arial;font-size:13px;font-weight:normal;
    70.     padding:4px 15px;
    71.     cursor:pointer;
    72.     vertical-align:top
    73.     }
    74. </style>
    75. </head>
    76.  
    77. <body>
    78. <div id="dragandrophandler">
    79. <form id="form1">
    80. <input name="file" multiple id="pnImg" type="file" accept="image/jpeg,image/png,image/gif" onChange="upF(this);" title="Выбрать фото" style="position: absolute; margin: 0px; padding: 0px; top: 0px; right: 0px; width: 639px; height: 352px; font-size: 0px; opacity: 0; cursor: pointer; z-index: 2;"></form>
    81.  
    82. Перетащи сюда файлы</div>
    83. <br><br>
    84. <div id="status1"></div>
    85. <script>
    86. function sendFileToServer(formData,status)
    87. {
    88.     var uploadURL ="Uploadfile.php"; //Upload URL
    89.     var extraData ={}; //Extra Data.
    90.     var jqXHR=$.ajax({
    91.             xhr: function() {
    92.             var xhrobj = $.ajaxSettings.xhr();
    93.             if (xhrobj.upload) {
    94.                     xhrobj.upload.addEventListener('progress', function(event) {
    95.                         var percent = 0;
    96.                         var position = event.loaded || event.position;
    97.                         var total = event.total;
    98.                         if (event.lengthComputable) {
    99.                             percent = Math.ceil(position / total * 100);
    100.                         }
    101.                         //Set progress
    102.                         status.setProgress(percent);
    103.                     }, false);
    104.                 }
    105.             return xhrobj;
    106.         },
    107.     url: uploadURL,
    108.     type: "POST",
    109.     contentType:false,
    110.     processData: false,
    111.         cache: false,
    112.         data: formData,
    113.         success: function(data){
    114.             status.setProgress(100);
    115.  
    116.             $("#status1").append("File upload Done<br>");        
    117.         }
    118.     });
    119.  
    120.     status.setAbort(jqXHR);
    121. }
    122.  
    123. var rowCount=0;
    124. function createStatusbar(obj)
    125. {
    126.      rowCount++;
    127.      var row="odd";
    128.      if(rowCount %2 ==0) row ="even";
    129.      this.statusbar = $("<div class='statusbar "+row+"'></div>");
    130.      this.filename = $("<div class='filename'></div>").appendTo(this.statusbar);
    131.      this.size = $("<div class='filesize'></div>").appendTo(this.statusbar);
    132.      this.progressBar = $("<div class='progressBar'><div></div></div>").appendTo(this.statusbar);
    133.      this.abort = $("<div class='abort'>Abort</div>").appendTo(this.statusbar);
    134.      obj.after(this.statusbar);
    135.  
    136.     this.setFileNameSize = function(name,size)
    137.     {
    138.         var sizeStr="";
    139.         var sizeKB = size/1024;
    140.         if(parseInt(sizeKB) > 1024)
    141.         {
    142.             var sizeMB = sizeKB/1024;
    143.             sizeStr = sizeMB.toFixed(2)+" MB";
    144.         }
    145.         else
    146.         {
    147.             sizeStr = sizeKB.toFixed(2)+" KB";
    148.         }
    149.  
    150.         this.filename.html(name);
    151.         this.size.html(sizeStr);
    152.     }
    153.     this.setProgress = function(progress)
    154.     {      
    155.         var progressBarWidth =progress*this.progressBar.width()/ 100;  
    156.         this.progressBar.find('div').animate({ width: progressBarWidth }, 10).html(progress + "% ");
    157.         if(parseInt(progress) >= 100)
    158.         {
    159.             this.abort.hide();
    160.         }
    161.     }
    162.     this.setAbort = function(jqxhr)
    163.     {
    164.         var sb = this.statusbar;
    165.         this.abort.click(function()
    166.         {
    167.             jqxhr.abort();
    168.             sb.hide();
    169.         });
    170.     }
    171. }
    172. function handleFileUpload(files,obj)
    173. {
    174.    for (var i = 0; i < files.length; i++)
    175.    {
    176.         var fd = new FormData();
    177.         fd.append('file', files[i]);
    178.  
    179.         var status = new createStatusbar(obj);
    180.         status.setFileNameSize(files[i].name,files[i].size);
    181.         sendFileToServer(fd,status);
    182.  
    183.    }
    184. }
    185. $(document).ready(function()
    186. {
    187. var obj = $("#dragandrophandler");
    188. obj.on('dragenter', function (e)
    189. {
    190.     e.stopPropagation();
    191.     e.preventDefault();
    192.     $(this).css('border', '2px solid #0B85A1');
    193. });
    194. obj.on('dragover', function (e)
    195. {
    196.      e.stopPropagation();
    197.      e.preventDefault();
    198. });
    199. obj.on('drop', function (e)
    200. {
    201.  
    202.      $(this).css('border', '2px dotted #0B85A1');
    203.      e.preventDefault();
    204.      var files = e.originalEvent.dataTransfer.files;
    205.      alert(files[0]);
    206.  
    207.      //We need to send dropped files to Server
    208.      handleFileUpload(files,obj);
    209. });
    210. $(document).on('dragenter', function (e)
    211. {
    212.     e.stopPropagation();
    213.     e.preventDefault();
    214. });
    215. $(document).on('dragover', function (e)
    216. {
    217.   e.stopPropagation();
    218.   e.preventDefault();
    219.   obj.css('border', '2px dotted #0B85A1');
    220. });
    221. $(document).on('drop', function (e)
    222. {
    223.     e.stopPropagation();
    224.     e.preventDefault();
    225. });
    226.  
    227. $("#pnImg").on('change', function (e)
    228. {
    229.  
    230.   var files = '';
    231.      handleFileUpload(files,obj);
    232. });
    233.  
    234.  
    235. });
    236. </script>
    237. </body>
    238. </html>
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Смысл изобретать велосипед, когда такого добра навалом...