在 IE11 中规范化文件名并在 Javascript 中创建新文件

Posted

技术标签:

【中文标题】在 IE11 中规范化文件名并在 Javascript 中创建新文件【英文标题】:Normalising the fileName in IE11 and creating of a new file in Javscript 【发布时间】:2020-06-21 14:03:24 【问题描述】:

我正在尝试上传文件,但我想规范化它的名称,它适用于其他浏览器,但在 IE11 中,我搜索发现不支持此方法(规范化),所以我m 使用 polyfill unorm。所以规范化现在工作正常,但我们不能直接更改文件名,我们需要创建一个新文件。但是我们不能使用新文件,因为它也不支持。所以我使用了新的 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]);

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

【问题讨论】:

您在这里遗漏了一个重要部分:您如何生成对服务器的请求?您是否有机会使用 FormData?在这种情况下,您只需要使用formData.append(field, blob, filename) 的第三个参数即可。 是的,我正在使用 formdata,我已经这样做了,但它没有工作,现有的代码是,我将您的建议添加到此代码中,但它没有工作。 fd = new FormData(); fd.append("id", 参数); fd.append(file.label || "uploadedFile", file, file[paramName]); 请将此部分作为edit 包含在您的问题中。 @Kaiido 我现在用 file.name 替换了 file[paramName],我得到了文件名,但它没有标准化。也许 unorm 不是我应该使用的?我的文件名中有特殊的法语字符 éà。 这就是我得到的“aaacape... PNG”,我想我需要像替换使用 normalize 之类的东西 【参考方案1】:

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

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

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

Angular File Upload

File Upload using AngularJS

【讨论】:

以上是关于在 IE11 中规范化文件名并在 Javascript 中创建新文件的主要内容,如果未能解决你的问题,请参考以下文章

ie浏览器网页中直接打开文件,没有下载到本地,并在修改后保存,文件还在吗?从哪里找?XP系统

Bootstrap 4 导航栏无法在 IE11 中正确呈现

在 IE11 中打开由 createObjectURL 创建的链接

在IE 11中循环一段代码

绝对定位的弹性项目不会从 IE11 中的正常流程中删除

Flexbox定位IE11 [重复]