春天:从REST WebService获得响应作为多部分文件 [英] spring : get response as Multipart File from REST WebService

查看:77
本文介绍了春天:从REST WebService获得响应作为多部分文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Spring 4.0为RESTFUL Web服务创建POC. 要求是从REST WEB服务接收MultipartFile作为响应.

I am creating POC for RESTFUL Web service using Spring 4.0. Requirement is to receive MultipartFile as Response from REST WEB-Service.

REST服务控制器

@RequestMapping(value="/getcontent/file", method=RequestMapping.post)
public MultipartFile getMultipartAsFileAsObject() {

    File file = new File("src/test/resources/input.docx");
    FileInputStream input = new FileInputStream(file);
    MultipartFile multipartFile = new MockMultipartFile("file",file.getName(),
                                 "application/docx", IOUtils.toByteArray(input));

    return multipartFile        
}

我使用第三方客户端和Apache Http客户端调用此服务.请看一下输出.

I call this service using third party Clients and Apache Http Client as well. kindly have a look on output.

使用第三方REST客户端,即邮递员

输出看起来像Json-

output looks like Json -

{
    "name" : "file",
    "originalfilename" : "sample.docx",
    "contentType" : "application/docx",
    "content" : [
                82,
                101,
                97,
                100,
                101,    
                32,
                32,
                .
                .
                .
                .
                .
            ]  
}

Apache HTTP客户端示例代码

private static void executeClient() {
HttpClient client = new DefaultHttpClient();
HttpPost postReqeust = new HttpPost(SERVER_URI);

try{
    // Set Various Attributes

    HttpResponse response = client.execute(postReqeust) ;

    //Verify response if any
    if (response != null)
    {
        InputStream inputStream = response.getEntity().getContent();
        byte[] buffer = new byte[inputStream.available()];
        inputStream.read(buffer);

        OutputStream outputStream = new FileOutputStream
                                   (new File("src/main/resource/sample.docx"));
        outputStream.write(buffer);
        outputStream.flush();
        outputStream.close();
    }

}
catch(Exception ex){
    ex.printStackTrace();
}

Apache Http客户端的输出

文件已创建,但为空. (0个字节).

file is getting Created but It is empty. (0 bytes).

推荐答案

 I found some interesting answers from multiple stackoverflow questions. 
 Links are given below

在静态Web服务中下载文件

用于发送单个文件:(从以上来源复制)

@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getFile() {
  File file = ... // Initialize this to the File path you want to serve.
  return Response.ok(file, MediaType.APPLICATION_OCTET_STREAM)
      .header("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"" ) //optional
      .build();
}

用于发送Zip文件:(从以上来源复制)

1)首先使用方法:

您可以使用上述方法发送任何文件/Zip.

You can use above method to send any file / Zip.

private static final String FILE_PATH = "d:\\Test2.zip";
@GET
@Path("/get")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getFile() {
    File file = new File(FILE_PATH);
    ResponseBuilder response = Response.ok((Object) file);
    response.header("Content-Disposition", "attachment; filename=newfile.zip");
    return response.build();

}

2)方法二:

@GET
@Path("/get") 
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public StreamingOutput helloWorldZip() throws Exception {
    return new StreamingOutput(){
    @Override
        public void write(OutputStream arg0) throws IOException, WebApplicationException {
            // TODO Auto-generated method stub
            BufferedOutputStream bus = new BufferedOutputStream(arg0);
            try {
                Thread.currentThread().getContextClassLoader().getResource("");
                File file = new File("d:\\Test1.zip");
                FileInputStream fizip = new FileInputStream(file);
                byte[] buffer2 = IOUtils.toByteArray(fizip);
                bus.write(buffer2);
            } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
        }
    };
}

这篇关于春天:从REST WebService获得响应作为多部分文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆