reportProgress在生产中不起作用

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

当我上传视频文件时,它可以在本地正常工作(开发模式)。但是,当我将其上传到服务器(产品)时,它不起作用。这是服务:

uploadVideo(id: String, file, imageId) {
        let formData = new FormData();
        formData.append('video', file);
        formData.append('imageId', imageId);
        return this.http.post<any>(`.../${id}/video`, formData, {reportProgress: true, observe: 'events'})
                .pipe(map(response => {
                        return response;
                }));
    }

这里是组件->

this.arrivalProductService.uploadVideo(this.data.id, this.selectedFile, imageId)
      .pipe(
        map((event) => {
          console.log('event', event);
          if(event.type === HttpEventType.UploadProgress){
            const percentDone = Math.round(100 * event.loaded / event.total);
            return { status: 'progress', message: percentDone };
          }
          if (event.type === HttpEventType.Response) {
            return event.body;
          }
        }),
        catchError(error => {
          return throwError(error);
        }),
        finalize(() => {
          console.log('completed');
        })
      )
      .subscribe(
        data => {
          ....
       })

如果我在map()上记录事件,则在本地dev上它返回所有进度:像({状态:'progress',消息:0},...等等),在生产时它什么也不返回。我无法理解代码有什么问题。.请帮助我

angular typescript file-upload progress-bar production
1个回答
0
投票

您可能在生产版本中使用了服务工作者。

https://angular.io/guide/service-worker-devops#bypassing-the-service-worker

绕过服务人员 在某些情况下,您可能希望完全绕过Service Worker,而让浏览器来处理请求。例如,当您依赖服务工作者(例如reporting progress on uploaded files当前不支持的功能时。

要绕过服务人员,您可以将ngsw-bypass设置为请求标头或查询参数。 (标题或查询参数的值将被忽略,可以为空或省略。)

因此您的情况:

uploadVideo(id: String, file, imageId) {
        let formData = new FormData();
        const headers = new HttpHeaders({ 'ngsw-bypass': ''});

        formData.append('video', file);
        formData.append('imageId', imageId);
        return this.http.post<any>(`.../${id}/video`, formData, {reportProgress: true, observe: 'events', headers: headers})
                .pipe(map(response => {
                        return response;
                }));
}
© www.soinside.com 2019 - 2024. All rights reserved.