玩转HTML5应用实战:灵活拖拉文件
- - ITeye博客本人原创作品,原文发表在:. 在HTML5中,出现了众多的新的技术和特性,而本文将介绍的是目前HTML5标准中,对如何将用户客户端的文件拖拉到浏览器这一特性进行初步的讲解. 在HTML5中的标准中,提到了希望能在新一代浏览器中,支持用户直接将客户端桌面的文件拖放到浏览器中,甚至鼓励做更多的工作(比如上传文件).
<form id="upload" action="upload.php" method="POST" enctype="multipart/form-data">
<fieldset>
<legend>HTML File Upload</legend>
<input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="300000" />
<div>
<label for="fileselect">Files to upload:</label>
<input type="file" id="fileselect" name="fileselect[]" multiple="multiple" />
<div id="filedrag">or drop files here</div>
</div>
<div id="submitbutton">
<button type="submit">Upload Files</button>
</div>
</fieldset>
</form>
<div id="messages">
Status Messages
</div>
#filedrag
{
display: none;
font-weight: bold;
text-align: center;
padding: 1em 0;
margin: 1em 0;
color: #555;
border: 2px dashed #555;
border-radius: 7px;
cursor: default;
}
#filedrag.hover
{
color: #f00;
border-color: #f00;
border-style: solid;
box-shadow: inset 0 3px 4px #888;
}
// getElementById
function $id(id) {
return document.getElementById(id);
}
//
// 输出信息
function Output(msg) {
var m = $id("messages");
m.innerHTML = msg + m.innerHTML;
}
// 判断当前浏览器中文件API是否可用
if (window.File && window.FileList && window.FileReader) {
Init();
}
//
// 初始化程序
function Init() {
var fileselect = $id("fileselect"),
filedrag = $id("filedrag"),
submitbutton = $id("submitbutton");
// 添加文件选择的事件监听
fileselect.addEventListener("change", FileSelectHandler, false);
// 判断xmlhttprequest 2是否可用
var xhr = new XMLHttpRequest();
if (xhr.upload) {
// file drop
filedrag.addEventListener("dragover", FileDragHover, false);
filedrag.addEventListener("dragleave", FileDragHover, false);
filedrag.addEventListener("drop", FileSelectHandler, false);
filedrag.style.display = "block";
// remove submit button
submitbutton.style.display = "none";
}
}
function FileDragHover(e) {
e.stopPropagation();
e.preventDefault();
e.target.className = (e.type == "dragover" ? "hover" : "");
}
function FileSelectHandler(e) {
FileDragHover(e);
// 获得所有的文件列表
var files = e.target.files || e.dataTransfer.files;
// 循环处理每个文件
for (var i = 0, f; f = files[i]; i++) {
ParseFile(f);
}
}
function ParseFile(file) {
Output(
"
File information: " + file.name +
" type: " + file.type +
" size: " + file.size +
" bytes
"
);
}
function ParseFile(file) {
Output(
"
File information: " + file.name +
" type: " + file.type +
" size: " + file.size +
" bytes
"
);
}
if (file.type.indexOf("text") == 0) {
var reader = new FileReader();
reader.onload = function(e) {
Output(
"
" + file.name + ":
" +
e.target.result.replace(//g, ">") +
"
"
);
}
reader.readAsText(file);
}
// display an image
if (file.type.indexOf("image") == 0) {
var reader = new FileReader();
reader.onload = function(e) {
Output(
"[b]" + file.name + ":[/b]
" +
'[img]' + e.target.result + '[/img]
'
);
}
reader.readAsDataURL(file);