Spring中开发RESTful风格的文件下载接口,无需保存服务器直接下载文件

Spring中开发RESTful风格的文件下载接口,无需保存服务器直接下载文件

    /**
     * 文本下载
     * @param id
     * @return
     */
    @GetMapping(value = "/demo/download/{id:^[1-9]\\d*$}", produces = {MediaType.MULTIPART_FORM_DATA_VALUE})
    public ResponseEntity<byte[]> download(@PathVariable(value = "id") final int id) {
        DataCall dataCall = dataCallService.findById(id);
        String dialogText = dataCall.getDialogText();
        if (StringUtils.isEmpty(dialogText)) {
            throw new BadRequestException("validate.demo.txt.exist");
        }
        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setContentDispositionFormData("attachment", new String((SessionManager.getSession().getId() + ".TXT").getBytes("UTF-8"), "ISO8859-1"));
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            return new ResponseEntity<>(dialogText.getBytes(), headers, HttpStatus.OK);
        } catch (Exception e) {
            throw new BadRequestException("validate.demo.txt.downLoad");
        }
    }

为什么不使用HttpStatus.CREATED参考:
spring实现文件下载和HttpStatus.CREATED

自定义返回异常信息
在这里插入图片描述

测试效果如下:
在这里插入图片描述

欢迎关注微信公众号《元旦儿的北漂》,有很多程序员的干活哦。
oracle序列详解

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Java的RESTful风格接口传输PDF文件可以通过以下步骤完成: 1. 首先,需要定义一个RESTful接口,用于接收PDF文件。例如,可以使用JAX-RS框架来定义接口,如下所示: ``` @POST @Path("/upload/pdf") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadPdf(@FormDataParam("file") InputStream fileInputStream, @FormDataParam("file") FormDataContentDisposition contentDispositionHeader) { // 处理上传的PDF文件 } ``` 2. 在客户端,需要使用HTTP POST方法将PDF文件上传到该RESTful接口。可以使用Java的URLConnection或HttpClient来实现。以下是使用URLConnection的示例代码: ``` File pdfFile = new File("path/to/pdf/file.pdf"); URL url = new URL("http://example.com/api/upload/pdf"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=---Boundary"); conn.setChunkedStreamingMode(0); OutputStream outputStream = conn.getOutputStream(); PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream, "UTF-8"), true); writer.println("---Boundary"); writer.println("Content-Disposition: form-data; name=\"file\"; filename=\"" + pdfFile.getName() + "\""); writer.println("Content-Type: application/pdf"); writer.println(); Files.copy(pdfFile.toPath(), outputStream); writer.println(); writer.println("---Boundary--"); writer.close(); int responseCode = conn.getResponseCode(); String responseMessage = conn.getResponseMessage(); ``` 在上面的代码,需要将文件流写入到输出流,并且在请求头设置Content-Type为multipart/form-data。另外需要注意,文件流的参数名需要与RESTful接口的参数名保持一致。 3. 在RESTful接口,可以使用Java的PDF解析库如iText或PDFBox来处理上传的PDF文件。可以将文件保存到本地或者将其转换为其他格式进行处理。 ``` try { PDDocument document = PDDocument.load(fileInputStream); // 处理PDF文件 document.close(); } catch (IOException e) { e.printStackTrace(); } ``` 以上就是在Java的RESTful风格接口传输PDF文件的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值