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) ?
发布表单时,您会发送一个键-值对列表,但是每个键可以使用不同的值多次出现。在编程中,这种类型的结构称为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)则抛出异常)。