解决net::ERR_UPLOAD_FILE_CHANGED错误的方案

作者:起个名字好难2024.01.17 05:48浏览量:39

简介:在使用Chrome浏览器上传文件时,可能会遇到net::ERR_UPLOAD_FILE_CHANGED错误。这个错误通常发生在文件被修改后,浏览器无法识别新旧文件。本文将介绍解决此问题的方法。

千帆应用开发平台“智能体Pro”全新上线 限时免费体验

面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用

立即体验

在使用Chrome浏览器上传文件时,可能会遇到net::ERR_UPLOAD_FILE_CHANGED错误。这个错误通常发生在文件被修改后,浏览器无法识别新旧文件。为了解决这个问题,我们需要采取一些措施来检测文件是否被修改,并在必要时让用户重新选择文件。
首先,我们需要了解为什么会出现这个错误。当我们在表单中选择一个文件并尝试上传时,Chrome浏览器会进行一些健全性检查。如果我们在上传过程中修改了文件,浏览器会把原始文件和修改后的文件视为两个不同的文件。由于安全机制,Chrome浏览器不允许上传被修改的文件。
要解决这个问题,我们可以使用File对象的arrayBuffer()方法来获取文件的ArrayBuffer,然后检测文件是否被更改。这个方法可以在axios中捕获net::ERR_UPLOAD_FILE_CHANGED错误,并判断文件是否被修改。
下面是一个示例代码,演示如何使用isFileChanged方法检测文件是否被修改:

  1. const isFileChanged = (file: File): Promise<boolean> => {
  2. return new Promise((resolve, reject) => {
  3. file.slice(0, 1).arrayBuffer().then(() => resolve(false)).catch(() => reject(true))
  4. })
  5. }

这个方法会返回一个Promise,如果文件未被修改,Promise将解析为false;如果文件被修改,Promise将拒绝并返回true。我们可以在表单提交时使用这个方法来检测文件是否被修改。如果返回true,我们可以在表单中清除该文件,让用户重新选择。
除了使用isFileChanged方法,我们还可以考虑使用beforeUpload事件来检测文件是否被修改。当用户选择一个文件后,我们可以捕获beforeUpload事件,并使用isFileChanged方法检测文件是否被修改。如果返回true,我们可以取消上传操作,并提示用户重新选择文件。
下面是一个示例代码,演示如何使用beforeUpload事件和isFileChanged方法:

  1. const uploadFile = (file: File) => {
  2. const isFileChanged = (file: File): Promise<boolean> => {
  3. return new Promise((resolve, reject) => {
  4. file.slice(0, 1).arrayBuffer().then(() => resolve(false)).catch(() => reject(true))
  5. })
  6. }
  7. const formData = new FormData();
  8. formData.append('file', file);
  9. axios.post('/upload', formData, {
  10. headers: {
  11. 'Content-Type': 'multipart/form-data'
  12. },
  13. beforeUpload: async (file) => {
  14. if (await isFileChanged(file)) {
  15. alert('文件已被更改,请重新选择');
  16. return false;
  17. }
  18. return true;
  19. }
  20. }).then(() => {
  21. alert('文件上传成功');
  22. }).catch((error) => {\n
article bottom image

相关文章推荐

发表评论