使用Django和Angular2下载Excel文件

2024-09-30 18:14:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个项目,其中我保存文件在SMB文件夹,并使用Django为背面和角度2为正面。我已经成功地下载了.csv文件,但是当下载.xls文件时,它已损坏。文件中的行如下所示:

Admin-Grisham
B�a�=���=o'��x<�*8X@�"��1���Arial1���Arial1���Arial1���Arial1�?�Arial1��Arial1�$�Arial1���Arial1���Calibri1�

这是我的视图.py文件:

 '''Download file'''
def get(self, request, file_name):

    bicloudreposervice = BiCloudRepoService()

    file_obj = bicloudreposervice.get_user_file(request.user.email, file_name)
    file_path = file_obj.name

    with open(file_path, 'rb') as tmp:

        if 'xls' in file_name:
            resp = HttpResponse(tmp, content_type='application/vnd.ms-excel;charset=UTF-8')
        else:
            resp = HttpResponse(tmp, content_type='application/text;charset=UTF-8')

        resp['Content-Disposition'] = "attachment; filename=%s" % file_name

    self.logger.debug('Downloading file')

    return resp

typescript中服务文件中的相关函数如下所示:

^{pr2}$

以及组件文件:

  import * as FileSaver from "file-saver";
   ...

  downloadFile(name){
   this.connectorsService.downloadFile(name).subscribe(
   res => {this.successDownloadFile(res, name);},
   error =>  this.errorMessage = <any>error,
   ()=> {});
 }

 successDownloadFile(res: any, name: String){

  this.showLoader = false;
  let blob;

  blob = new Blob([res._body], {type: 'application/vnd.ms-excel'});

  FileSaver.saveAs(blob, name.toString());
}

相应的html文件:

...
<div (click)="downloadFile(file.name)">
    <i class="material-icons">file_download</i>
</div>
...

我使用外部库文件保存器,但是我也尝试过从Blob创建一个URL对象,并且窗口。打开角度,但文件看起来还是一样的。 我试过content_type='application/vnd.ms-excel;charset=UTF-8'视图.py以及{type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});创建角度上的水滴时。在

我能做错什么?也许我应该用Django不同的方式处理文件? 提前谢谢你的帮助。在


Tags: 文件nameapplicationtyperescontentthisexcel