【问题标题】:How remove invalid or specific files from fileupload in prime ng p-fileUpload?如何在prime ng p-fileUpload中从fileupload中删除无效或特定文件?
【发布时间】:2019-03-01 21:17:37
【问题描述】:

我已使用文件上传来上传文件,我想在选择其中一个文件时验证这些文件,如果该文件不是有效文件,则将其删除。

.html

<p-fileUpload #fileUpload  name="datafiles"
           [accept]=FileExtentionValue
           [url]="FileUploadUrl"
           [showUploadButton]="isUploadEnable"
           [disabled]="diableFileupload"
            (onUpload)="onUpload($event)"
            (onSelect)="validateFile($event)"
           multiple="multiple">
          </p-fileUpload>

.ts

onUpload(event) {
        for (let file of event.files) {
          this.uploadedFiles.push(file);
        }
        this.messageService.add({ severity: 'info', summary: 'File Uploaded', detail: '' });
      }

验证填充名称

     validateFile(event) {
    let tempFiles: any = [];
    var FileNmaeMust: any;
    for (let file of event.files) {
      tempFiles.push(file.name);
    }
    for (let i = 0; i < tempFiles.length; i++) {
      let count = 1;
      for (let j = 0; j < this.ClientDataFileTypeValue.length; j++) {
        FileNmaeMust = "";
        if (this.ClientDataFileTypeValue[j] == "Order") {
          FileNmaeMust = this.MPID + "_ORDER_";
        }
        /*** Validate File  */
        var templen = FileNmaeMust + "YYYYMMDD.psv";
        if (tempFiles[i].includes((FileNmaeMust).toLocaleUpperCase()) && tempFiles[i].length == templen.length) {
          this.isUploadEnable = true;
          break;
        }
        if (count == this.ClientDataFileTypeValue.length) {
          this.isUploadEnable = false;
          this.messageService.add({ severity: 'error', summary: 'Files', detail: 'Please select correct file ' + tempFiles[i] });
        }
        count++;
      }
    }
  }

【问题讨论】:

    标签: html angular file-upload primeng


    【解决方案1】:

    onSelect Event - 选择文件时调用的回调。

    Official Documentation

    示例:

        <p-fileUpload #fileUpload  name="datafiles"
               [accept]=FileExtentionValue
               [url]="FileUploadUrl"
               [showUploadButton]="isUploadEnable"
               (onUpload)="onUpload($event)" multiple="multiple"
               (onSelect)="onSelect($event)">
        </p-fileUpload>
    
        onUpload(event) {
            for (let file of event.files) {
              this.uploadedFiles.push(file);
            }
            this.messageService.add({ severity: 'info', summary: 'File Uploaded', detail: '' });
        }
    
       onSelect(event) {
           // event.originalEvent: Original browser event. 
           // event.files: List of selected files.
    
           // Your validation code against list of selected files / selected file.
        }
    

    希望这会有所帮助。,

    【讨论】:

    • 我进行了文件验证,但无法删除特定文件
    • 有什么问题?你可以看看How to remove element from array。您必须从 this.uploadedFiles 数组中删除文件。
    【解决方案2】:

    我已经使用 id 解决了它。我已经定义了 #fileUpload 并将其传递给 (onSelect)="validateFile($event,fileUpload)" 函数来验证和从数组中删除此文件。

    <p-fileUpload #fileUpload name="datafiles" 
    [accept]=FileExtentionValu
    [url]="FileUploadUrl" 
    [disabled]="isDiableFileupload"
    [showUploadButton]="isUploadEnable"
    (onSelect)="validateFile($event,fileUpload)" (onBeforeUpload)="onBeforeSend($event)"
    (onUpload)="onUpload($event)"
     multiple="multiple">
    </p-fileUpload>
    

    .ts

    import {FileUpload } from 'primeng/primeng';
    
    validateFile(event, uploader: FileUpload) {
            let tempFiles: any = [];
            var FileNmaeMust: any;
            for (let file of event.files) {
              tempFiles.push(file.name);
            }
            for (let i = 0; i < tempFiles.length; i++) {
              let count = 1;
              for (let j = 0; j < this.ClientDataFileTypeValue.length; j++) {
                FileNmaeMust = "";
                if (this.ClientDataFileTypeValue[j] == "Order") {
                  FileNmaeMust = this.MPID + "_ORDER_";
                }
                /*** Validate File  */
                var templen = FileNmaeMust + "YYYYMMDD.psv";
                if (tempFiles[i].includes((FileNmaeMust).toLocaleUpperCase()) && tempFiles[i].length == templen.length) {
                  this.isUploadEnable = true;
                  break;
                }
                if (count == this.ClientDataFileTypeValue.length) {
                  this.isUploadEnable = false;
                  uploader.remove(event, i);
                  this.isUploadEnable = true;
                  this.messageService.add({ severity: 'error', summary: 'Files', detail: 'Please select correct file ' + tempFiles[i] });
                }
                count++;
              }
            }
          }
    

    【讨论】:

    • 我已修改此代码以验证文件名,以确保文件名对于 sharepoint 和其他 Microsoft 存储技术是可接受的。虽然我的验证代码已被命中并准备就绪,但 uploader.remove 方法存在问题。出于某种原因,这有时会起作用,但有时会不起作用,如果我已经将文件上传到我的数据库并显示在上传器中,它们有时会出现在 uploader.Files 中,有时它们不会。当他们不这样做时,一切正常。其他人有这个问题吗?
    • 我在上面找到了解决我的问题的方法,如果您遇到同样的问题,请使用 clear 而不是 remove。
    • 嗨,@dmoore1181 我使用 remove 仅从数组中删除特定文件。
    猜你喜欢
    • 2013-11-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2018-10-24
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    相关资源
    最近更新 更多