我想从api下载并保存一个文件。我的文件名是 text.txt 但保存的文件名为: _text.txt_ 这个文件的内容是: [object Object]
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:这是一个测试文本。。
那么,为什么保存的文件名在开始和结束处都带有“\”,而内容不是响应正文中的文本呢。
谢谢你的建议
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
filename.replace(/"/g, '')
saveAs
saveAs(blob, filename.replace(/"/g, ''));