angular - 如何在 Angular 中设置图片上传大小限制(例如最大 2mb)

标签 angular typescript angular6 ng2-file-upload

我们正在尝试对图像的大小设置限制,例如最大应为 2mb。我们正在使用 ng2-file-upload。您可以在下面看到代码:

uploader: FileUploader = new FileUploader({
    url: URL,
    disableMultipart: true
  });
...
...
OnFileSelected(event) {
    const file: File = event[0];

    this.ReadAsBase64(file)
      .then(result => {
        this.selectedFile = result;
      })
      .catch(err => console.log(err));
  }

  Upload() {
    if (this.selectedFile) {
      this.usersService.AddImage(this.selectedFile).subscribe(
        data => {
          this.socket.emit('refresh', {});
          console.log(data);
        },
        err => console.log(err)
      );
    }
  }

  ReadAsBase64(file): Promise<any> {
    const reader = new FileReader();
    const fileValue = new Promise((resolve, reject) => {
      reader.addEventListener('load', () => {
        resolve(reader.result);
      });

      reader.addEventListener('error', event => {
        reject(event);
      });

      reader.readAsDataURL(file);
    });

    return fileValue;
  }

我们在哪里以及如何对图像设置限制?

最佳答案

根据 W3 documentation :

On getting, if the readAsDataURL() read method is used, the result attribute must return a DOMString that is a Data URL [RFC2397] encoding of the File or Blob's data.

因此您的 reader.result 为空或 DOMString。 DOMString 是具有 16 位字符的字符串。

因此,要进行尺寸检查,您应该:

  1. 检查reader.result是否为null,如果是,则抛出错误或拒绝Promise

  2. 检查字符串的长度,知道每个字符都是 2 个字节

  3. 如果length*2大于2^20则抛出错误,其实2*2^20就是2MB有多少个字节

现在让我们用代码翻译它:

  ReadAsBase64(file): Promise<any> {
    const reader = new FileReader();
    const fileValue = new Promise((resolve, reject) => {
      reader.addEventListener('load', () => {
        const result = reader.result as DOMString;
        if (!result) reject('Cannot read variable');
        if (result.length * 2  > 2**21) reject('File exceeds the maximum size'); // Note: 2*2**20 = 2**21 
        resolve(reader.result);
      });

      reader.addEventListener('error', event => {
        reject(event);
      });

      reader.readAsDataURL(file);
    });

    return fileValue;
  }

关于angular - 如何在 Angular 中设置图片上传大小限制(例如最大 2mb),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54196079/

相关文章:

Angular 6 Async-await 无法处理 http 请求

javascript - 如何对 Vue 应用程序中的嵌套操作进行单元测试?

javascript - 此示例代码的作用是什么?

angular - 错误 : Uncaught (in promise): TypeError: guard is not a function

java - 我已允许 @CrossOrigin(origins ="*") 注释,但它仍然不起作用。谁能告诉我这里出了什么问题吗?

javascript - 使用 JavaScript 的 Selenium Webdriver,如何使用 chrome.exe 的特定路径启动 Chrome?

angular6 - Angular 6 ng lint select 已弃用

javascript - 您如何从从 index.html 导入的 Javascript 脚本访问全局变量和函数并在组件中使用它们?

Angular2 Animation Transitions 仅针对某些事件触发

Angular2 如何仅在父组件存在时将其注入(inject)指令?