为啥我的 PrimeNG FileUpload 组件存在这个问题,该组件与引用不存在的页面的 url 参数相关

Posted

技术标签:

【中文标题】为啥我的 PrimeNG FileUpload 组件存在这个问题,该组件与引用不存在的页面的 url 参数相关【英文标题】:Why I have this problem with PrimeNG FileUpload component related to the url parameter that referer to a page that doesn't exist为什么我的 PrimeNG FileUpload 组件存在这个问题,该组件与引用不存在的页面的 url 参数相关 【发布时间】:2021-04-09 15:45:22 【问题描述】:

我正在使用 PrimeNG 开发一个 Angular 应用程序,我发现 PrimeNG FileUpload 组件存在一些困难,这个组件:https://primefaces.org/primeng/showcase/#/fileupload

我一直在关注这个组件的官方文档和源代码示例,但是我遇到了以下问题。

在我的 Angular 组件 html 代码中,我放置了示例提供的相同代码,如下所示:

<div class="card">
  <h5>Advanced</h5>
  <p-fileUpload name="demo[]" url="./upload.php" (onUpload)="onUpload($event)"
                multiple="multiple" accept="image/*" maxFileSize="1000000">
          <ng-template pTemplate="content">
              <ul *ngIf="uploadedFiles.length">
                  <li *ngFor="let file of uploadedFiles">file.name - file.size bytes</li>
              </ul>
          </ng-template>
  </p-fileUpload>
</div>

在这里,我注意到了第一个“奇怪”的东西。该组件在组件定义中声明 url="./upload.php" 参数。这对我来说似乎很奇怪,因为这是一个 Angular 应用程序,我必须在我的 Angular 应用程序中处理所有内容。

在这个组件的官方文档中我可以读到这个:

FileUpload 需要一个 url 属性作为上传目标和一个名称 识别后端的文件。

具体是什么意思?为什么?我与 PHP 应用程序无关。这一切都必须由我的 Angular 组件处理。

回到代码示例,然后我将此数组放入我的 TypeScript 代码中以包含上传的文件:

uploadedFiles: any[] = [];

以及处理实际文件上传功能的以下方法(我认为当用户单击更新按钮时会触发该功能):

onUpload(event) 
    console.log("onUpload() START");
    for(let file of event.files) 
        console.log("FILE TO BE UPLOADED: ", file);
        this.uploadedFiles.push(file);
    

    this.messageService.add(severity: 'info', summary: 'File Uploaded', detail: '');

现在运行我的应用程序,我可以选择要上传的文件:

现在的问题是单击 Update 按钮会发生一些奇怪的事情(正如我所料,由于存在 url="./upload.php" 参数在此上传组件的 HTML 定义中)。

单击更新按钮,我的 TypeScript 代码中定义的 onUpload(event) 未执行,我在 Chrome 控制台中收到以下错误:

zone-evergreen.js:2845 POST http://localhost:4200/upload.php 404 (Not Found)

PrimeNG FileUpload 组件似乎正在尝试对 url 参数指定的 URL 执行 HTTP POST 调用,该参数在我的应用程序中不存在(并且该参数必须不存在)。

为什么?我错过了什么?我该如何处理这种情况,以便整个操作由我的 TypeScript 组件代码处理? (想法是,当单击上传按钮时,会调用 onUpload() 方法,然后文件将使用我的自定义代码保存在 Firebase 存储中)。我该如何解决?

【问题讨论】:

【参考方案1】:

我认为我自己使用文档中显示的“自定义上传”解决了它:

    在我的组件的 HTML 代码中:

    高级
     <p-fileUpload name="myfile[]" customUpload="true" (uploadHandler)="myUploader($event)">
    
                 multiple="multiple" accept="image/*" maxFileSize="1000000">
           <ng-template pTemplate="content">
               <ul *ngIf="uploadedFiles.length">
                   <li *ngFor="let file of uploadedFiles">file.name - file.size bytes</li>
               </ul>
           </ng-template>
     </p-fileUpload>
    

    在我的 TypeScript 代码中:

     myUploader(event) 
       console.log("onUpload() START");
       for(let file of event.files) 
         console.log("FILE TO BE UPLOADED: ", file);
         this.uploadedFiles.push(file);
       
       this.messageService.add(severity: 'info', summary: 'File Uploaded', detail: '');
     
    

【讨论】:

以上是关于为啥我的 PrimeNG FileUpload 组件存在这个问题,该组件与引用不存在的页面的 url 参数相关的主要内容,如果未能解决你的问题,请参考以下文章

PrimeNG 手动调用 FileUpload

如何在 PrimeNG 的 FileUpload 组件中中止文件上传?

为啥我不能阻止用户编辑 PrimeNG 表单字段值?

“无法绑定到 'ngModel',因为它不是 'p-calendar' 的已知属性”尝试使用 PrimeNG 组件的错误消息,为啥?

jhipster为啥不更新

primeng 中 pickList组件的使用