Angular 7+:如何只允许上传内容为utf-8的文件?

问题描述 投票:1回答:2

我使用角度7+,我有一个简单的功能来上传文件和阅读他们的内容,但我想知道如何识别文档内容的编码,只允许编码utf-8的文件。

async uploadFile(event) {
    var document;
    var reader = new FileReader();
    let file = event.target.files[0];

    reader.onload = ((file: any) => {
      return (e: any) => {
        document.description = e.srcElement.result;
        document.title = title;
        document.fileName = file.name;
      }
    })(file);

    reader.readAsText(file);
  }

谢谢。

javascript angular typescript utf-8
2个回答
0
投票

这是FileReader.readAsText()的文档

instanceOfFileReader.readAsText(blob [,encoding]);


要确保上载的文件是UTF-8,请执行以下操作:

instanceOfFileReader.readAsText(blob, 'UTF-8');

知道UTF-8是默认设置,所以它应该工作,你也可以这样做:

instanceOfFileReader.readAsText(blob);

如果编码不是UTF-8,则读取失败。考虑到this作为规范性文件,我没有看到任何关于这方面的文件。

您应该尝试上传具有其他编码的文件以确保它。


encoding文档中没有名为FileReader的属性或任何类似的属性


0
投票

没有防弹技术来获取文本文件的编码。无论如何,一个名为jschardet的库试图实现这个目标。

function read(f) {
  var reader = new FileReader();
  reader.readAsText(f);
  reader.onload = function(e) {
    console.log(jschardet.detect(reader.result))
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jschardet/2.1.0/jschardet.min.js"></script>
<input type="file" onchange="read(this.files[0])"></input>
© www.soinside.com 2019 - 2024. All rights reserved.