html5上传文件 file API -XMLHttpRequest 2 示例

html文件:

<!DOCTYPE html>
<html>
<head>
    <title>使用XMLHttpRequest上传文件</title>
    <script type="text/javascript">
    var xhr = new XMLHttpRequest();

    //监听选择文件信息
    function fileSelected() {
        //HTML5文件API操作
          var file = document.getElementById('fileName').files[0];
          if (file) {
            var fileSize = 0;
            if (file.size > 1024 * 1024)
              fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB';
            else
              fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';

            document.getElementById('fileName').innerHTML = 'Name: ' + file.name;
            document.getElementById('fileSize').innerHTML = 'Size: ' + fileSize;
            document.getElementById('fileType').innerHTML = 'Type: ' + file.type;
          }
        }

    //上传文件
    function uploadFile() {
          var fd = new FormData();
          //关联表单数据,可以是自定义参数
          fd.append("name", document.getElementById('name').value);
          fd.append("fileName", document.getElementById('fileName').files[0]);

          //监听事件
          xhr.upload.addEventListener("progress", uploadProgress, false);
          xhr.addEventListener("load", uploadComplete, false);
          xhr.addEventListener("error", uploadFailed, false);
          xhr.addEventListener("abort", uploadCanceled, false);
          //发送文件和表单自定义参数
          xhr.open("POST", "upload.php");
          xhr.send(fd);
        }
    //取消上传
    function cancleUploadFile(){
        xhr.abort();
    }

    //上传进度
    function uploadProgress(evt) {
          if (evt.lengthComputable) {
            var percentComplete = Math.round(evt.loaded * 100 / evt.total);
            document.getElementById('progressNumber').innerHTML = percentComplete.toString() + '%';
          }
          else {
            document.getElementById('progressNumber').innerHTML = 'unable to compute';
          }
    }

    //上传成功响应
    function uploadComplete(evt) {
        //服务断接收完文件返回的结果
        alert(evt.target.responseText);
    }

    //上传失败
    function uploadFailed(evt) {
         alert("上传失败");
    }
    //取消上传
    function uploadCanceled(evt) {
        alert("您取消了本次上传.");
    }
    </script>
</head>
<body>

<div class="row">
      <label for="fileToUpload">选择文件</label>
<input type="file" name="fileName" id="fileName" onchange="fileSelected();"/>
    </div>
<div id="fileName"></div>
<div id="fileSize"></div>
<div id="fileType"></div>
<div class="row">
上传者:<input type="text" name="name" id="name"/>
<input type="button" onclick="uploadFile()" value="上传" />
<input type="button" onclick="cancleUploadFile()" value="取消" />
    </div>
<div id="progressNumber"></div>


</body>
</html>

upload.php文件

mkdir("tmp/".date("Y-m-d"));

$save_path = "tmp/".date("Y-m-d")."/";

//文件后缀
$path_info = pathinfo($_FILES['fileName']['name']);
$file_extension = $path_info["extension"];

//文件名
$rand_name = time().rand(0,1000)."_video";
$file_name = $rand_name.".".$file_extension;

if (move_uploaded_file($_FILES['fileName']['tmp_name'], $save_path.$file_name)){
    //以json形式返回处理结果
    echo json_encode(array('error'=>0,'url'=>$save_path.$file_name));
    exit;
}  else {
    echo json_encode(array('error'=>1,'url'=>$save_path.$file_name));
    exit;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值