一个 http 多部分请求可以将文件分成多个部分吗?
Can one http mutlipart request split up the file in multiple parts?
表单中的文件是否作为 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);
}
}
}
这是处理多部分表单数据的class。
但是我不明白为什么RestEasyAPI方法getFormDataMap
returns一个InputPart
的列表:
List<InputPart> inputParts = uploadForm.get("file");
这个file
可以拆分成不同的部分吗?
我应该只考虑第一部分吗:
uploadForm.get("file").get(0)
?
当您 post 一个表单时,您会发送一个键值对列表,但每个键可以出现多次,但值不同。在编程中,这种类型的结构称为 ListMultimap
(或潜在的 SetMultiMap)。
表单通常使用 application/x-www-form-urlencoded
编码,这意味着只允许使用字符串值。如果需要上传文件,需要使用multipart/form-data
,但是同一个键仍然可以保存多个值。
Multipart file 并不是说一个file被分割成多个部分,而是说request被分割成多个部分。每个部分都包含一个基于普通字符串的值或一个文件(和元数据),并且每个参数由边界分隔。
如果您创建了一个 multipart/form-data
表单,并且有 5 个文件上传字段都命名为 "file",并且您在每个字段中上传了不同的文件,那么 List<InputPart> inputParts = uploadForm.get("file");
将 return 一个大小为 5 的列表,每个列表对应名为 "file" 的键的每个不同值。
在大多数情况下,UI 将只有一个上传字段,在这种情况下,我将只使用 uploadForm.get("file").get(0)
,并可能检查列表的大小,如果大小大于 1(如果需要文件,则刚好为 1)。
表单中的文件是否作为 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);
}
}
}
这是处理多部分表单数据的class。
但是我不明白为什么RestEasyAPI方法getFormDataMap
returns一个InputPart
的列表:
List<InputPart> inputParts = uploadForm.get("file");
这个file
可以拆分成不同的部分吗?
我应该只考虑第一部分吗:
uploadForm.get("file").get(0)
?
当您 post 一个表单时,您会发送一个键值对列表,但每个键可以出现多次,但值不同。在编程中,这种类型的结构称为 ListMultimap
(或潜在的 SetMultiMap)。
表单通常使用 application/x-www-form-urlencoded
编码,这意味着只允许使用字符串值。如果需要上传文件,需要使用multipart/form-data
,但是同一个键仍然可以保存多个值。
Multipart file 并不是说一个file被分割成多个部分,而是说request被分割成多个部分。每个部分都包含一个基于普通字符串的值或一个文件(和元数据),并且每个参数由边界分隔。
如果您创建了一个 multipart/form-data
表单,并且有 5 个文件上传字段都命名为 "file",并且您在每个字段中上传了不同的文件,那么 List<InputPart> inputParts = uploadForm.get("file");
将 return 一个大小为 5 的列表,每个列表对应名为 "file" 的键的每个不同值。
在大多数情况下,UI 将只有一个上传字段,在这种情况下,我将只使用 uploadForm.get("file").get(0)
,并可能检查列表的大小,如果大小大于 1(如果需要文件,则刚好为 1)。