如何在 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 中接收多个文件并进行相应处理?的主要内容,如果未能解决你的问题,请参考以下文章

java如何读取InputStream中的字符串

R语言将多个dataframe数据添加在列表(list)结构中并进行列表dataframe的索引:包含dataframe的列表包含dataframe的列表的索引

Android InputStream Internet 断开连接

InputStream不通过蓝牙接收数据

已解决SpringMvc上传文件,但是使用Multipartfile接收到文件后发现文件变大,且文件打不开

将文件从外部存储加载到 Inputstream