事情是这样发生的,我们要求一次性响应多个文件,然后客户端如何解析响应。

首先我们需要知道这个form-data的格式是这样的:

----------------------------分割标志
内容
----------------------------分割标志
内容
----------------------------分割标志--

最后的--是formdata结束标识。
用分割标志(也叫边界)分割,然后解析各部分内容就ok了。分割标志是在Content-Type头里面取得的,比如:multipart/form-data; boundary=--------------------------471446023710655129531565 加粗的部分就是了

实现:使用commons-upload解析。

FileItemFactory fileItemFactory = new DiskFileItemFactory();
ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory);
List<FileItem> items=fileUpload.parseRequest(new UploadContext(){
    // TODO 实现该接口
});

就这几行就OK。UploadContext是个接口,你需要自己实现。你可以参照ServletRequestContext写一个实现。

实际上,你也可以自己解析,这里提供一个思路,先将response的content转为String,根据分隔符分割,然后各部分内容解析出有用的信息(文件名,name,内容格式等等),最后将各部分里面保存的内容转换为inputstream保存就OK。

标签: none

添加新评论