关于Response携带字节文件流回传的问题

一、单文件流的携带回传
要求:HttpServletResponse response、字节流byte[]数据
我这里只是简单演示一下,其中FileCopyUtils是Spring框架自带的工具类,有兴趣的可以去看看:https://blog.csdn.net/superdog007/article/details/16897541

	import org.springframework.util.FileCopyUtils;
	public void test(HttpServletResponse response) {
			String string = "中国加油";
			byte[] os = string.getBytes();
    	    if (ArrayUtils.isNotEmpty(os)) {
       			 response.setContentType("application/pdf;charset=UTF-8");
       			 try {
            			FileCopyUtils.copy(os,response.getOutputStream());
       			 } catch (Exception e) {
            			log.error("操作失败",e);
       			 }
  			 }
	}

二、多文件流的携带回传
因为response是单次响应的,往往就是文件流回传第一个后,系统框架会为我们自动关闭。所以多文件流的回传,我是直接压缩成zip流之后在回传。代码如下:

public void test(HttpServletResponse response) {
    String[] splitContractIds = ["1","2","3"];
    try {
        //  获取zip流
        ZipOutputStream zipOutputStream=new ZipOutputStream(response.getOutputStream());
        //  设置响应类型和字符集
        response.setContentType("application/zip;charset=UTF-8");
        for (String splitContractId : splitContractIds) {
            
            byte[] os = splitContractId.getBytes() ;
            if (ArrayUtils.isNotEmpty(os)) {
                try {
                    //  设置pdf文件的名称
                    ZipEntry zipEntry=new ZipEntry(splitContractId+".PDF");
                    zipOutputStream.putNextEntry(zipEntry);
                    zipOutputStream.write(os);
                } catch (IOException e) {
                    log.error("操作失败",e);
                }
            } 
        }
        zipOutputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
  }

关于多文件流的回传,也可以参考下面的文章:
1、https://blog.csdn.net/weixin_42213545/article/details/82712327
2、https://blog.csdn.net/qq_44111464/article/details/106996998
3、https://blog.csdn.net/lkr_lkr/article/details/104599901

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要返回response字节,需要使用HTTP协议来进行数据传输。具体操作可以按照以下步骤进行: 1. 使用HTTP协议创建一个response对象,设置好响应头和响应体的内容。 2. 将响应体的内容转换成字节,可以使用Python的bytes()函数来实现。 3. 设置响应头的Content-Length字段,表示响应体的长度。 4. 通过HTTP协议将response对象发送给客户端,可以使用Python的socket库来实现。 下面是一个简单的示例代码: ```python import socket # 创建一个socket对象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定IP和端口号 server_socket.bind(('localhost', 8000)) # 监听端口 server_socket.listen(1) while True: # 接受客户端连接 client_socket, client_address = server_socket.accept() # 读取客户端发送的请求数据 request_data = client_socket.recv(1024) # 创建一个response对象 response_body = b'Hello, World!' response_headers = { 'Content-Type': 'text/plain', 'Content-Length': str(len(response_body)) } response = b'HTTP/1.1 200 OK\r\n' for header in response_headers: response += header.encode() + b': ' + response_headers[header].encode() + b'\r\n' response += b'\r\n' + response_body # 发送response给客户端 client_socket.sendall(response) # 关闭客户端连接 client_socket.close() # 关闭服务器socket server_socket.close() ``` 在这个示例代码,我们创建了一个简单的HTTP服务器,当客户端连接到服务器时,服务器会返回一个包含"Hello, World!"的响应。在发送响应时,我们将响应体的内容转换成字节,并设置了Content-Length字段,表示响应体的长度。最后通过socket库将响应发送给客户端。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值