代码之家  ›  专栏  ›  技术社区  ›  eldios1981

使用FileSaver和blob将响应正文另存为文件

  •  2
  • eldios1981  · 技术社区  · 6 年前

    我想从api下载并保存一个文件。我的文件名是 text.txt 但保存的文件名为: _text.txt_ 这个文件的内容是: [object Object]

    const options = {
          headers: new HttpHeaders().append('Authorization', this.oAuthService.getAccessToken()),
          params: new HttpParams().append('responseType', 'text'),
          observe: 'response' as 'response'
        }
    
        return this.http.get(this.fileServerUrl + 'file/download/' + filename + '/' + version, options)
          .subscribe(
            resp => { this.saveToFileSystem(resp)
    
          });
      }
    
      private saveToFileSystem(response) {
        const contentDispositionHeader: string = response.headers.get('Disposition');
        const parts: string[] = contentDispositionHeader.split(';');
        const filename = parts[1].split('=')[1];
        filename.replace(/"/g, '');
        console.log(filename);
        console.log(response.body)
        const blob = new Blob([response.body], { type: 'text/plain' });
        saveAs(blob, filename);
      }
    

    第一个的输出控制台.log是文本.txt以及控制台.log的响应。主体is:这是一个测试文本。。

    那么,为什么保存的文件名在开始和结束处都带有“\”,而内容不是响应正文中的文本呢。

    谢谢你的建议

    1 回复  |  直到 6 年前
        1
  •  1
  •   Andreq Frenkel    6 年前

    const blob = new Blob([JSON.stringify(response.body)], { type: 'text/plain' });
    

    以及 _text.txt_ 字符串是不可变类型。所以呢文件名.replace... 不会更改文件名值,它将返回新值。 必须创建新变量:

    const newFileName = filename.replace(/"/g, '');
    ...
    saveAs(blob, newFileName);
    

    或者干脆把 filename.replace(/"/g, '') saveAs

    saveAs(blob, filename.replace(/"/g, ''));