以前上传文件需要提交Form表单。
HTML5方式上传文件,可以通过使用FormData类模拟Form表单提交,从而实现无刷新上传文件。
假设有一个文件选择框
有下面两种方式上传文件:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用HTML5的FormData API进行文件上传时,您有两种主要方法:XMLHttpRequest和Fetch API。下面是如何根据您的需求选择并实施这两种方法的详细说明:
特点: - 支持进度事件:可以实时监控文件上传进度。 - 兼容性较好:适用于需要兼容较旧浏览器的场景。
实现步骤: 1. 获取文件对象:通过document.getElementById('pic').files
获取用户选择的文件数组。 2. 创建FormData实例:var form = new FormData();
。 3. 添加文件到表单数据:form.append('file', files[0]);
。 4. 初始化XMLHttpRequest对象,并设置为异步模式。 5. 监听progress
事件,用于显示上传进度。 6. 设置请求方法和URL,然后发送请求:xhr.send(form);
。 7. 通过监听readystatechange
事件处理响应,判断上传成功或失败。
特点: - 语法简洁:相比XMLHttpRequest,代码更简洁易读。 - 不支持原生进度事件:但可以通过其他手段(如Stream API结合AbortController)间接实现进度跟踪,不过这通常较为复杂且不是所有浏览器都支持。 - 现代浏览器兼容性:适用于追求最新技术标准和用户体验的项目。
实现步骤: 1. 同样先获取文件对象并创建FormData实例。 2. 使用fetch(url, {method: 'POST', body: form})
发起POST请求。 3. 链式调用.then()
处理响应,注意检查response.status
来判断操作是否成功。 4. 由于Fetch API本身不直接支持进度事件,如果需要进度指示,可能需要采用额外的技术方案或者考虑继续使用XMLHttpRequest。
综上所述,根据实际应用场景中对进度显示的需求、浏览器兼容性要求以及代码风格偏好,您可以灵活选择XMLHttpRequest或Fetch API来实现HTML5无刷新文件上传功能。