本程序是利用3.x的Firefox浏览器可以读取本地文件的特性,实现通过xmlHttPRequest上传大文件功能,并在可以上传过程中动态显示上传进度。略加修改,并与服务器端配合,可以实现断点续传等诸多功能。本例主要是研究FireFox的file-input节点的一些特性,其他客户端应用,如Flash、Sliverlight等,在实现客户端大文件上传时,在数据传输与服务器端存储等方面,与本例的思路基本一致。注意:文件体积似乎有临界点,但这个临界点是多少尚未确认。建议不要用此方法上传超过100M的文件。以下是客户端javascript代码复制代码 代码如下:/* * FireFoxFileSen 在本文中,我们将深入探讨如何使用Firefox浏览器的JavaScript功能来上传大文件,特别是利用XMLHttpRequest对象实现文件上传并展示进度。这种方法主要适用于Firefox 3.x版本,其他浏览器可能不兼容,因此在实施前需进行兼容性测试。 Firefox 3.x引入了一个新特性,允许读取本地文件。这一特性使得开发者可以通过JavaScript访问`<input type="file">`元素,获取用户选择的文件信息。在示例代码中,`FireFoxFileSender`函数是实现这一功能的核心。它接受一个配置对象,包含文件输入元素ID(`file`)、服务器接收地址(`url`)以及可选的数据包大小(`packageSize,默认为102400字节,即100KB)。 在`FireFoxFileSender`内部,首先检查配置参数是否完整。如果文件输入元素未设置或未选择文件,会将错误信息存入`errMsg`队列。然后,获取选中文件的`getAsDataURL()`,这将文件转换为Base64编码的数据字符串。注意,原始代码尝试直接发送二进制流,但在Firefox 3.x中可能不支持,所以使用Base64编码作为替代。同时,记录文件名、大小、类型等信息。 在上传过程中,文件会被分成多个数据包发送,分包大小由`packageSize`决定。每次发送数据时,会计算已发送的字节数,从而更新上传进度。这通常通过监听XMLHttpRequest的`onprogress`事件来实现,以便在上传过程中更新进度条或其他反馈元素。 为了实现断点续传,服务器端需要记录上传的进度,例如保存已接收的文件部分。当用户再次尝试上传时,客户端可以检测到已有的上传状态,并从上次中断的位置继续。这要求服务器端能够处理分块接收文件并将其组合成完整的文件。 虽然这种方法在理论上可行,但存在文件大小的限制。文中提到存在一个临界点,但具体数值未知,作者建议避免上传超过100MB的文件。这可能是由于浏览器对内存或网络连接管理的限制,或者是XMLHttpRequest对象自身的限制。 在其他客户端技术如Flash和Silverlight中,大文件上传的实现方式类似,但可能使用不同的API来处理数据传输和服务器交互。例如,Flash可以使用FileReference对象,而Silverlight可以利用IsolatedStorage和BinaryReader/BinaryWriter来处理大文件。 总结来说,Firefox 3.x通过JavaScript实现大文件上传涉及的关键技术包括:文件输入元素的API,XMLHttpRequest的使用,文件分块上传,以及可能的断点续传机制。虽然这种方法在特定环境下有效,但需要注意浏览器兼容性和文件大小的限制。对于现代浏览器,可能需要考虑使用HTML5的File API和FormData对象,这些更先进的技术提供了更好的大文件上传支持和更多的功能,如拖放上传、多文件上传等。
剩余6页未读,继续阅读
- 粉丝: 3
- 资源: 938
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0