首页 > 解决方案 > 在 IE11 中规范化文件名并在 Javscript 中创建新文件

问题描述

我正在尝试上传文件,但我想规范化它的名称,它适用于其他浏览器,但在 IE11 中,我搜索并发现不支持这种方法(规范化),所以我正在使用 polyfill不规范。所以规范化现在工作正常,但我们不能直接更改文件名,我们需要创建一个新文件。但是我们不能使用新文件,因为它也不支持。所以我使用了新的 Blob,但问题是我没有在服务器端获取文件名,它总是 Blob。

其他浏览器的代码:

var fileName = file.name.normalize('NFD').replace(/[\u0300-\u036f]/g, "");
var newFile = new File([file], fileName, { type: file.type });
newFile.label = 'FICHIER';

IE11的代码

fileName = unorm.nfd(file.name);
newFile = new Blob([file], { type: file.type });
newFile.label = 'Fichier';
newFile.name= fileName;

要生成对服务器的请求,我使用 formdata :

fd = new FormData();
fd.append("id", param);
fd.append(file.label || "uploadedFile", file, file[paramName]);

你能告诉我我应该怎么做才能得到文件名,或者是否有其他方法可以做到这一点。

标签: javascriptangularjsfileblobinternet-explorer-11

解决方案


Blob 对象不包含 name 属性,因此,我们不能通过 Blob 对象更改名称。

获取到文件数据后,我建议你可以附加一个新的参数来记录新的文件名,然后在提交表单或保存上传的文件时,你可以将文件数据和新的文件名发送到服务器。

另外,这里还有一个关于使用FormData上传文件的帖子,请参考:

角度文件上传

使用 AngularJS 上传文件


推荐阅读