一个http mutlipart请求可以将文件分成多个部分吗?

Suj*_* PS 0 java rest multipartform-data java-ee resteasy

表单中的文件是否按multipart/form-data请求的不同部分发送?

我必须将文件从表单发送到一个REST端点。

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.jboss.resteasy.plugins.providers.multipart.InputPart;
import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;

public class BulkUploadTask {


    public void readFile(MultipartFormDataInput input) throws IOException, InvalidFormatException{

        Map<String, List<InputPart>> uploadForm = input.getFormDataMap();
        List<InputPart> inputParts = uploadForm.get("file");

        for (InputPart part : inputParts) {

            InputStream inputStream = part.getBody(InputStream.class, null);


        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这是处理Multipart表单数据的类。

但是我不明白为什么RestEasy API方法getFormDataMap返回以下列表InputPart

List<InputPart> inputParts = uploadForm.get("file");
Run Code Online (Sandbox Code Playgroud)

可以将file其拆分为不同的部分吗?

我应该只考虑第一部分:

uploadForm.get("file").get(0)

Kla*_*aek 5

发布表单时,您会发送一个键-值对列表,但是每个键可以使用不同的值多次出现。在编程中,这种类型的结构称为ListMultimap(或可能称为SetMultiMap)。

表单通常使用编码,application/x-www-form-urlencoded这意味着仅允许使用字符串值。如果您需要上传文件,则需要使用multipart/form-data,但是同一键仍可以保存多个值。

分段文件并不意味着将文件拆分为多个部分,而是意味着将请求拆分为多个部分。每个部分都包含一个基于常规字符串的值或一个文件(和元数据),每个参数都由一个边界分隔。

如果您创建一个multipart/form-data表单,并且有5个文件上传字段(均名为“ file”),并且每个文件都上传了一个不同的文件,List<InputPart> inputParts = uploadForm.get("file");则将返回大小为5的列表,其中一个名为“ file”的键的每个不同值。

在大多数情况下,用户界面只会有一个上传字段,在这种情况下,我只会使用uploadForm.get("file").get(0),并且可能会检查列表的大小,如果大小大于1(或者如果需要文件,则为1)则抛出异常)。