javascript - 如何仅在 Angular 文件上传中将文件限制为 UTF-8 编码?

标签 javascript angularjs node.js multipartform-data ng-file-upload

我正在使用 ng-file-upload 上传文本文件。

<span type="file" class="btn" ngf-select ng-model="fileUser" name="fileUser" ngf-pattern="'.txt,.TXT'" ngf-accept="'text/plain'"> Select File </span>

有没有办法只接受 UTF-8 编码的文本文件并拒绝任何其他类型的编码?

最佳答案

ng-file-upload 本身不支持它,但您可以自己创建它。以这种方式连接到 ngf-change:

ngf-change="checkEncoding($files, $file, $newFiles, $duplicateFiles, $invalidFiles, $event)" 

包括encoding.js在你的应用程序中。当用户选择一个.txt 文件时,通过FileReader 加载文件的内容并使用encoding.js 来测试编码:

$scope.checkEncoding = function(files, file, newFiles, duplicateFiles, invalidFiles, event) {
  if (!event.target.files) return
  var testFile = event.target.files[0];
  var reader = new FileReader();
  reader.onload = function(e) {
    var content = new Uint8Array(e.target.result);
    var encoding = Encoding.detect(content);
    if (encoding != 'UTF8') {
      //alert to the user, reset the file ng-model whatever ...
    }
  }
  reader.readAsArrayBuffer(testFile)
}

这是一个有效的 plunkr -> http://plnkr.co/edit/1UM9NDpNgRbJ13R67xuf?p=preview

关于javascript - 如何仅在 Angular 文件上传中将文件限制为 UTF-8 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52483138/

相关文章:

javascript从json中获取元素id

javascript - UI路由器: understanding resolve promises flow of the root-sub states

javascript - AngularJS - 更改 iframe 或类似内容中的内容

node.js - 如何将所有现有的全局 NPM 包安装到本地目录中?

javascript - 如何仅在第一个函数完全完成后才运行第二个 Javascript 函数?

javascript - Angular 4嵌套formArray/formGroup将数据库查询中的值放回表单中

javascript - Vaadin 的 AbstractJavascriptComponent 的部分状态更改

javascript - Angular 解析/评估/执行由第 3 方 JS 加载到指令模板中的 JS

node.js - 连接表中仅创建了列

node.js - 如何完全破坏 socket.io 连接?