首页 > 解决方案 > 无法打开 .oft,文件已打开或没有权限

问题描述

案子:

我有一个 .oft 文件,我通过 api 提供服务。在本地打开 .oft 文件时,我可以打开它(甚至可以同时打开多次)。

但是当我在本地运行我的 Angular 前端、Spring-Boot 后端并下载文件时,我无法打开它并看到以下错误消息:

We can't open 'C:\Users\(username)\Downloads\trnMiniDataRefreshTemplate.oft'. It's possible the file is already open, or you don't have permission to open it.        

To check your permissions, right-click the file folder, then click Properties. 

基于此,我认为这可能与丢失这些特殊字符有关,请问我该如何解决?

这是我的代码:

弹簧引导控制器:

@GetMapping(path = "/trnMiniDataRefreshTemplate", produces = "application/octet-stream;charset=UTF-8")
    public @ResponseBody byte[] getFile() throws IOException {
        InputStream in = getClass()
          .getResourceAsStream("/eml/trnMiniDataRefreshTemplate.oft");
        return IOUtils.toByteArray(in);
    }

角服务:

public downloadTrnMail(): Observable<Blob>{

    let headers = new HttpHeaders();
    headers = headers.append('Accept', "application/octet-stream;charset=UTF-8");

    const httpGetOptions =
      {
          headers: headers,
          responseType: 'blob' as 'json',
      };
    return this.httpClient.get<Blob>(`${UtilsService.baseUrl}/refreshPlanning/trnMiniDataRefreshTemplate`, httpGetOptions);
  }

订阅的 Angular 组件:

emailRefreshPlanning(){

    this.refreshPlanningService.downloadTrnMail().subscribe(response => {

        const blob = new Blob([response], {type: "application/octet-stream;charset=UTF-8"});
        fileSaver.saveAs(blob, "trnMiniDataRefreshTemplate.oft");
      });
  }

fileSaver 变量来自 ngx-filesaver 库:https ://www.npmjs.com/package/ngx-filesaver

标签: angularspring-bootrestoutlookblob

解决方案


推荐阅读