如何在 InputStream 中接收多个文件并进行相应处理?
Posted
技术标签:
【中文标题】如何在 InputStream 中接收多个文件并进行相应处理?【英文标题】:How can receive multiple files in InputStream and process it accordingly? 【发布时间】:2014-05-01 13:40:52 【问题描述】:我想接收从我的客户端上传的多个文件。我上传了多个文件并使用 JAX-RS
(Jersey) 请求我的服务器端 (Java)。
我有以下代码,
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void upload(@Context UriInfo uriInfo,
@FormDataParam("file") final InputStream is,
@FormDataParam("file") final FormDataContentDisposition detail)
FileOutputStream os = new FileOutputStream("Path/to/save/" + appropriatefileName);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0)
os.write(buffer, 0, length);
如何在服务器端单独编写文件在客户端上传。
例如。我上传了My_File.txt, My_File.PNG, My_File.doc
等文件。
我需要在服务器端写和上面的My_File.txt, My_File.PNG, My_File.doc
一样。
我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:您正在寻找的场景有一个博客。希望这可以帮助 http://opensourzesupport.wordpress.com/2012/10/27/multiple-file-upload-along-with-form-data-in-jax-rs/
【讨论】:
那篇博文看起来不错,但它直接处理HttpServletRequest
并使用外部库 (commons-fileupload) 来处理文件上传。 FormDataMultiPart
内置于球衣中,使用起来可能更简单【参考方案2】:
你可以试试这样的:
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void upload(FormDataMultiPart formParams)
Map<String, List<FormDataBodyPart>> fieldsByName = formParams.getFields();
// Usually each value in fieldsByName will be a list of length 1.
// Assuming each field in the form is a file, just loop through them.
for (List<FormDataBodyPart> fields : fieldsByName.values())
for (FormDataBodyPart field : fields)
InputStream is = field.getEntityAs(InputStream.class);
String fileName = field.getName();
// TODO: SAVE FILE HERE
// if you want media type for validation, it's field.getMediaType()
【讨论】:
@奥尔登。我没有得到 getName() 这种方式。此外,如果我传递一个对象,我会得到 NullPointer。请您再解释一下。以上是关于如何在 InputStream 中接收多个文件并进行相应处理?的主要内容,如果未能解决你的问题,请参考以下文章
R语言将多个dataframe数据添加在列表(list)结构中并进行列表dataframe的索引:包含dataframe的列表包含dataframe的列表的索引
Android InputStream Internet 断开连接