当前位置: 首页 > 知识库问答 >
问题:

如何通过ResponseEntity发送ByteArrayResource

贾实
2023-03-14
  @GetMapping(value = "/exportods/{id}")
  public ResponseEntity<ExportDTO> exportODSFile(@PathVariable  String id)
      throws InvalidationRequestNotFoundException, IOException, ExportInvalidationRequestException {


    File odsFfile = null;
    ByteArrayResource resource = null;
    ExportInvalidationRequestDTO exportInvalidationRequestDTO = new ExportInvalidationRequestDTO();
    try {

      //getting the file
      odsFfile = exportService.exportInvalidationRequest(id);

      Path pathObj = Paths.get(odsFfile.getCanonicalPath());

      //creating the resource
      resource = new ByteArrayResource(Files.readAllBytes(pathObj));

      exportDTO.setResource(resource);

    } catch (IOException e) {
      exportDTO.setError(new ErrorDTO(HttpStatus.NOT_FOUND.value()));
    }

    return ResponseEntity.ok(exportDTO);
  }

出口到:

public class ExportDTO extends AbstractReturnDTO {
  private ByteArrayResource resource;

  public ExportDTO (ByteArrayResource resource) {
    this.resource = resource;
  }

  public ExportDTO () {
  }

  public ByteArrayResource getResource() {
    return resource;
  }

  public void setResource(ByteArrayResource resource) {
    this.resource = resource;
  }
}

角分量法:

async downloadODSFile(id) {
    await this.requestService.downloadODSFile(id).subscribe((requestExportODS: RequestExportODS) => {
        if (!requestExportODS) {
            if(requestExportODS.error == null){
                //handle error here
            }
           else{
                saveAs(new Blob([requestExportODS.file], { type: \'application/vnd.oasis.opendocument.spreadsheet\'' }), id );
            }
        }
    });
}

一旦我点击导出按钮,我就会得到一个错误:

error: "Internal Server Error"
message: "Byte array resource [resource loaded from byte array] cannot be resolved to absolute file path"

共有1个答案

商琛
2023-03-14

在http服务方法中设置观察响应

//requestService
downloadODSFile(id) {
 return this.http.get<HttpResponse<any>>(`/exportods/${id}`, { observe: 'response' })
}

并且像这样使用它

async downloadODSFile(id) {
    await this.requestService.downloadODSFile(id).subscribe(res => {
        console.log(res.body) //Byte array
    });
}

BTW async和await在代码中是多余的,因为您还没有将observable转换为Promise。

 类似资料:
  • 问题内容: 我想使用JavaScript中的方法发送一些变量和一个字符串。 我从数据库中获取字符串,然后将其发送到PHP页面。我正在使用一个对象。 问题在于该字符串多次包含该字符,PHP中的数组将其视为多个键。 我试着更换与与功能,但它似乎并没有做任何事情。 有人可以帮忙吗? javascript代码和字符串如下所示: 字符串是: 问题答案: 您可以使用encodeURIComponent()。

  • 在我的应用程序中,如果多个用户使用相同的WiFi连接而不使用TCP,我希望通过WiFi将文件发送给多个用户。如何获取连接到指定wify的用户列表。我试过样品,但什么也没得到。

  • 我目前正试图弄清楚如何在Java上使用我用JavaScript在JSP上生成的二维数组。问题在于,当我将其分配给表单上隐藏的现有属性以便通过请求发送时,它会生成一个包含所有值的完整字符串,如下所示: 我怎样才能使html表单上的字段成为数组(我认为这是不可能的),或者将完整的数组发送到我的Java后端?Project正在使用Struts,因此这是一个Action类。谢谢各位。

  • 如何通过Azure从我的UWP-App向不同设备上的应用程序的其他实例发送推送通知? 以下是注册设备以接收推送的说明。(这是可行的)第二部分是关于如何在控制台应用程序上发送推送(这也是可行的)https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-store-dotnet-get-star

  • 在Firebase控制台中,我根据各种用户属性设置了访问群体,现在可以通过控制台向不同的用户群发送通知。有没有办法通过向fcm服务器发送http请求来实现同样的目的?“to”字段应该有一个技巧,但我想不出来。