HTML5拖放和多文件上传

标签 html file file-io drag-and-drop

我有一个 HTML 表单,其中包含一个带有多个文件选择的文件输入字段,我也有一个正在开发的拖放功能。我的问题是,如果可能的话,如何无缝集成这两个功能?

理想情况下,我希望用户通过拖放或文件对话框来选择他们的文件。用户完成文件选择后,单击表单提交按钮进行上传。

我想我的主要不确定性是如何将拖放的文件绑定(bind)到文件输入字段以提交表单。

最佳答案

我写了一些 jQuery 代码来做这件事,告诉我它是否适合你。

<!DOCTYPE html>
<html>
  <head>
    <title>Multiple DnD Uploader</title>
    <link rel="stylesheet" href="style.css" />
    <script type = "text/javascript" src = "../music/jquery.js"></script>
    <script type="text/javascript">
      $(document).ready(function(){
        $('#drop').change(function(event){
          files = event.target.files;
          $('#drop').css('display', 'none');
          for(var i = 0, len = files.length; i < len; i++) {
            if((files[i].fileName+"").substring((files[i].fileName+"").length-4,(files[i].fileName+"").length)=='.mp3'){
            $.ajax({
              type: "POST",
              url: "uploader.php?id="+i,
              contentType: "multipart/form-data",
              headers: {
                "X-File-Name" : files[i].fileName,
                "X-File-Size" : files[i].fileSize,
                "X-File-Type" : files[i].type
              },
              beforeSend:  function() {
                $('#info').append('<li class="indicator"><span class="label">File Name :</span> '+files[i].fileName+' | <span class="label">Size :</span> ' + files[i].fileSize + ' | <img id="'+i+'" src="loading.gif" /></li>');
              },
              processData: false,
              data: files[i],
              success: function(data){
                $('#'+data).attr('src', 'check.png');
              },error: function(data){
                $('#info').append('Error: ' + data + '<br />');
              }
            });
            }else{
              $('#info').append('Error: Incorrect file type. Looking for .mp3');
            }
          }
        });
      });
    </script>
  </head>
  <body>
    <div id="drop">
      <h1>Drop files here</h1>
      <p>To add them as attachments</p>
      <input type="file" multiple="true" id="filesUpload" />
    </div>
    <div id="info">
    </div>
  </body>
</html>

PHP 文件如下所示:

<?php
  $headers = array();
  foreach ($_SERVER as $k => $v){   
    if(substr($k, 0, 5) == "HTTP_"){
      $k = str_replace('_', ' ', substr($k, 5));
      $k = str_replace(' ', '-', ucwords(strtolower($k)));
      $headers[$k] = $v;
    }
  } 
  $file = new stdClass;
  $file->name = basename($headers['X-File-Name']);
  $file->size = $headers['X-File-Size'];
  $file->content = file_get_contents("php://input");
  if(file_put_contents('files/'.$file->name, $file->content))
    echo $_GET['id'];
?>

关于HTML5拖放和多文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6231542/

相关文章:

html - 语义网是否使用 XML 而不是 HTML 或 JSON?

javascript - 如何在小屏幕上分解表格的单元格?

java - 创建从资源路径到 jar 文件中图像的文件对象

c - 尝试删除标点符号并计算单词

linux - 写入远程文件 : When does write() really return?

java - java中的输入流

html - 如何在两个 Bootstrap 列之间直接添加两行?

html - body标签不显示(调整大小)可控

c++ - mprotect 和文件句柄

php - 文件夹写入权限