使用rest服务将文件从服务器端发送到客户端

时间:2017-06-01 11:53:40

标签: java spring rest file spring-mvc

我想使用rest服务从服务器端向客户端发送文件 我正在使用spring MVC。我使用了这种服务方法:

public ResponseEntity<InputStreamResource> postFile() throws Exception {


    DocumentDaoImpl dao = new DocumentDaoImpl();

    Document docCmis = (Document) dao.getDocument("workspace://SpacesStore/ae6d1722-0f08-49ab-a73b-c07036001318");
    byte[] myByteArray = readContent(docCmis.getContentStream().getStream());


    ClassPathResource myFile = new ClassPathResource(docCmis.getContentStreamFileName());
    //System.out.println("eeeee"+pdfFile);

    HttpHeaders headers = new HttpHeaders();
    headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
    headers.add("Pragma", "no-cache");
    headers.add("Expires", "0");
    return ResponseEntity
            .ok()
            .headers(headers)
            .contentLength(myByteArray.length)
            .contentType(MediaType.parseMediaType("application/octet-stream"))
            .body(new InputStreamResource(docCmis.getContentStream().getStream()));


}

和休息控制器类中的此函数

@RequestMapping(value = "/downloadPDFFile",produces = { "application/json" }, method = RequestMethod.GET)
@ResponseBody
public ResponseEntity downloadPDFFile() throws Exception {
    return courriersArrivésServices.postFile();

}

然后使用RestTemplate类进行休息调用,我试图获取我的文件

Map<String, Object> selectedCourrier=restTemplate.getForObject(SERVER_URI + "/getCourrierDetails"+"?id="+id, HashMap.class);

但这对我不起作用并给我这个错误

org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class org.springframework.http.ResponseEntity] and content type [application/octet-stream]

1 个答案:

答案 0 :(得分:0)

服务器端:

@RequestMapping("/download")
public byte[] download() throws Exception {
    File f = new File("C:\\WorkSpace\\Text\\myDoc.txt");
    byte[] byteArray = new byte[(int) f.length()];
    byteArray = FileUtils.readFileToByteArray(f);
    return byteArray;
}

客户端:

private ResponseEntity<byte[]> getDownload(){
    URI end = URI.create("http://vmvdi05059:8080/ePaymentsWeb/download");
    return rest.getForEntity(end,byte[].class);

}

public static void main(String[] args) throws Exception {
    byte[] byteArray = new TestClient().getDownload().getBody();
    FileOutputStream fos = new 
    FileOutputStream("C:\\WorkSpace\\testClient\\abc.txt");

    fos.write(byteArray);
    fos.close(); 
    System.out.println("file written successfully..");

 }