首页 > 编程 > HTML > 正文

HTML5应用之文件上传

2019-10-26 17:42:09
字体:
来源:转载
供稿:网友

长期以来,开发者们一直为此苦恼,大部分为解决这个问题都采用了flash作为解决方案,但flash并非灵丹妙药,因为flash版本,割据造成的问题有时反倒成为了噩梦。有些网站则采用了form标签的enctype=multipart/form-data属性,但这一属性要求服务器作出特殊的设置才能够显示进度,而且本身也比较复杂,复杂就意味着容易出现错误,这可不是我们想要的。

现在我们来看看Html5为什么能够解决这个问题,以及,它到底能做的多好。

用HTML5上传文件

在HTML5标准中,XMLHttpRequest对象被重新定义,被称为“XMLHttpRequest Level 2”,其中包含了以下5个新特性:

1、支持上传、下载字节流,比如文件、blob以及表单数据

2、增加了上传、下载中的进度事件

3、跨域请求的支持

4、允许发送匿名请求(即不发送HTTP的Referer部分)

5、允许设置请求的超时

在这篇教程中,我们主要关注第一和第二项特性,尤其是第二项——它能够提供我们想要的上传进度。和之前的方案不同,这个方案并不要求服务器作出特殊的设置,因此大家边看教程就可以边动手试试了。

上面图示的就是我们能够实现的内容:

1、显示上传的文件信息,比如文件名、类型、尺寸

2、一个能够显示真实进度的进度条

3、上传的速度

4、剩余时间的估算

5、已上传的数据量

6、上传结束后服务器返回的响应

另外,凭借XMLHttpRequest,我们的上传过程整个都是异步的,因此用户在上传文件的时候,依然可以操作网页当中的其它元素,并不需要专门等待上传的完成。而在上传结束后,我们能够获取服务器发回的响应,因此整个上传过程都显得相当顺理成章。

HTML5的进度事件

HTML5当中新增了一个进度事件(Progress Events),这个事件为我们提供了以下信息:

1、total – 文件大小

2、loaded – 已上传的大小

3、lengthComputable – 进度是否可计算

信息并不多,但是在计算文件进度上已经足够了。当然,也还有很多东西它没有直接给出,这非常遗憾。

HTML

与普通的文件上传代码并没有太大差异。不过注意,input标签关联了一个JavaScript函数在onchange上。

<!DOCTYPE html><html><head> <title>使用XMLHttpRequest上传文件</title></head><body><form id="form1" enctype="multipart/form-data" method="post" action="upload.php"><div class="row"> <label for="fileToUpload">Select a File to Upload</label><input type="file" name="fileToUpload" id="fileToUpload" onchange="fileSelected();"/> </div><div id="fileName"></div><div id="fileSize"></div><div id="fileType"></div><div class="row"><input type="button" onclick="uploadFile()" value="Upload" /> </div><div id="progressNumber"></div></form></body></html>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表