相对于使用了十多年的HTML表单,这是一个革命性的进步。虽然IE的落后让很多开发者还在观望中,但是Gmail邮箱的附件拖拽功能已经给部分用户带来了极大的方便,而需要大量上传文件的CMS(内容管理系统)也将会从中受益。
让我们看一下Firefox 是如何察岩使用拖拽上传功能的:
首先提供一个区域来放置文件
Html代码
1
<div name="image" id="dropbox" style="min-width:300pxmin-height:100pxborder:3px dashed silver">败肆御</div>
然后监听拖拽过程中的dragenter、dragleave、drop等事件
Js代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
document.addEventListener("dragenter", function(e){
dropbox.style.borderColor = 'gray'
}, false)
document.addEventListener("dragleave", function(e){
dropbox.style.borderColor = 'silver'
}, false)
dropbox.addEventListener("dragenter", function(e){
dropbox.style.borderColor = 'gray'
dropbox.style.backgroundColor = 'white'
}, false)
dropbox.addEventListener("dragleave", function(e){
dropbox.style.backgroundColor = 'transparent'
}, false)
dropbox.addEventListener("dragenter", function(e){
e.stopPropagation()
e.preventDefault()
}, false)
dropbox.addEventListener("dragover", function(e){
e.stopPropagation()
e.preventDefault()
}, false)
dropbox.addEventListener("drop", function(e){
e.stopPropagation()
e.preventDefault()
handleFiles(e.dataTransfer.files)
submit.disabled = false
}, false)
其中最主要的是drop事件中用handleFiles()依次处理所有文件
1
2
3
4
5
6
handleFiles = function(files) {
for (var i = 0i <files.lengthi++) {
var file = files[i]
}
}
对于图片类型的文件可以直接读取内容,显示预览图
1
2
3
4
5
6
7
8
9
10
11
12
if (!file.type.match(/image*/)) {
continue
}
var img = document.createElement("img")
img.classList.add("obj")
img.file = file
preview.appendChild(img)
var reader = new FileReader()
reader.onload = (function(aImg) { return function(e) { aImg.src = e.target.result}})(img)
reader.readAsDataURL(file)
接下来就是核心功能:ajax上传。首先新建一个XHR请求
1
2
var xhr = new XMLHttpRequest()
xhr.open('post', '/file/upload', true)
监听上传进度和完成事件
1
2
3
4
5
6
7
8
9
10
xhr.upload.addEventListener("progress", function(e) {
if (e.lengthComputable) {
var percentage = Math.round((e.loaded * 100) / e.total)
img.style.opacity = 1-percentage/100.0
}
}, false)
xhr.upload.addEventListener("load", function(e){
}, false)
最后把数据模拟成multipart/form-data的格式上传
1
2
3
4
5
6
7
8
9
10
11
xhr.setRequestHeader("Content-Type", "multipart/form-data, boundary="+boundary)// simulate a file MIME POST request.
xhr.setRequestHeader("Content-Length", fileSize)
var body = ''
body += "--" + boundary + "\r\n"
body += "Content-Disposition: form-dataname=\""+dropbox.getAttribute('name')+"\"filename=\"" + fileName + "\"\r\n"
body += "Content-Type: "+fileType+"\r\n\r\n"
body += fileData + "\r\n"
body += "--" + boundary + "--\r\n"
xhr.sendAsBinary(body)
聊天界面选择右上角的红色部分点击d出文件管理界面
选择第1-直接发送d出文件列表,选择自己要发送的文件点击“发送”按钮。
扩展资料
把电脑文件上传到QQ里
1.打开qq,点颤冲击应用管理器,点击微云。
2.点击上传,选择要上传的文件。
3.点击开始上传,文件就保存好了,也可以分享给好友。
第一种方式是直接拖动文件法,最为方便快捷
只要鼠标选中文件拖动至聊天框即可,在聊天框的任意范围即可(可以是打字处、显示聊天记录处也可以是形象处);
2/10
第二种方式复制黏贴法
首先选中要传送的文件或文件夹右键点击复制;
克隆实例恢复数据实践方案-百度智能云
关注恢复数据的人也在看
百度智能云广告
3/10
复制文件以茄团歼后在聊天框的输入文字处右键选择黏贴;
4/10
第三种方法是利用工具栏
直接找到聊天框工具栏,选择传送文件图标;
5/10
选择发送文件或文或拆件夹,也可以是发送离线文件(对方不在线时发送);
6/10
第四种发送图片方式
如果是在线发送图片可以在聊天输入处上的工具栏选择发送图片图标;
7/10
这里只能发送本地图片;
8/10
选择一张需要传送的图片,点击打开;
9/10
图片文件截图形式发送,点击发送,对方可以选择保存图片完成传送接收;
10/10
以上传送文件的步骤都会跳出这样一个传送状态框,如果对方在线可以直接点击接收,如果对方不在线或长时间不在线,你可以点击下面的‘发送离线文件’,文件将会发送到腾讯服务器上,等待对方接收,接收完后会有对方已接收文件的提示。
文件就正式传送完毕。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)