服务器解析form中文件,客户端解析服务器响应的multipart/form-data数据

multipart/form-data,多部件请求体。这个请求体比较特殊,它可以拆分为多个部件,每个部件都有自己的header和body,最常用的地方就是:客户端文件上传,因为有多个部件,在上传文件的时候,还可以在body中添加其他的数据。json,form。。。

一般来说,都是客户端发起multipart/form-data请求 ,服务器进行解析。而且这种东西的编码解码工作一般都是由底层的容器/框架完成。开发根本不必关心。但是我最近遇到了一个需求:

服务器响应multipart/form-data(包含了一个二进制文件和其他的文本数据),客户端来解析

意味着,需要自己完成2个东西

在服务端完成multipart/form-data的数据编码,并且响应给客户端

在客户端获取到响应后,进行数据的解码

multipart/form-data的请求体,看起来像这样(省略了部分 header)

POST /foo HTTP/1.1

Content-Length: 68137

Content-Type: multipart/form-data; boundary=---------------------------974767299852498929531610575

---------------------------974767299852498929531610575

Content-Disposition: form-data; name="description"

some text

---------------------------974767299852498929531610575

Content-Disposition: form-data; name="myFile"; filename="foo.txt"

Content-Type: text/plain

(content of the uploaded file foo.txt)

---------------------------974767299852498929531610575

服务端的编码

使用 org.apache.httpcomponents 库进行编码

org.apache.httpcomponents

httpmime

4.5.12

Controller

通过 MultipartEntityBuilder, 添加多个部件,每个部件有自己的名字,类型。构建出一个 HttpEntity对象。可以从这个对象中获取到编码后的IO流以及ContentType,直接响应给 客户端就完事儿,比较简单。

import java.io.File;

import java.nio.charset.StandardCharsets;

import javax.servlet.http.HttpServletResponse;

import org.apache.http.HttpEntity;

import org.apache.http.entity.ContentType;

import org.apache.http.entity.mime.MultipartEntityBuilder;

import org.apache.http.entity.mime.content.StringBody;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值