利用resteasy框架构建rest webservice----第六波:实现文件下载

来源:互联网 发布:弹珠枪在淘宝上怎么搜 编辑:程序博客网 时间:2024/06/05 09:21

客户端代码:

package resteasy.server;


import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;  
import javax.ws.rs.PUT;
import javax.ws.rs.Path;  
import javax.ws.rs.PathParam;  
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Component;
@Path(value = "echo")  
public class Echo {  
  @GET  
  @Path(value = "/{message}")  
  public String echoService(@PathParam("message") String message)  
  {  
      return message;  
  }  
 
    @PUT
    @Path(value = "/{folder}/{fileName}")
    public Response uploadFile(@PathParam("folder") String folder,@PathParam("fileName") String fileName,
            @Context HttpServletRequest request)
    {
        File f = new File("c:\\"+fileName);
        InputStream is = null;
        try {
            is = request.getInputStream();
            OutputStream os = new FileOutputStream(f);
            byte[] buffer = new byte[8192];
            int bytesRead = 0;
            while ((bytesRead = is.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            //FileUtils.copyInputStreamToFile(is, f);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return Response.ok().build();
    }
    
    /**
     * 下载对象
     * @param bucketName
     * @param objectName
     * @param request
     * @return
     * @throws FileNotFoundException
     */
    @Path(value = "/{bucketName}/{objectName}")
    @GET
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    public Response downloadObject(@PathParam(value = "bucketName") String bucketName,@PathParam(value = "objectName") String objectName,@Context HttpServletRequest request) throws FileNotFoundException
    {
    //    BucketObject bucketObject = objectManager.downloadObject(request.getHeader(CommonConstant.USER_TOKEN),CommonsUtil.generateSummary(request), bucketName, objectName);
        String fielname="C:\\"+bucketName+"\\"+objectName;
        //直接返回输出流
        File localFile = new File(fielname);
        FileInputStream fileInputStream = new FileInputStream(localFile);
        //return Response.ok(new BigFileOutputStream(bucketObject.getDataStream())).build();
        return Response.ok(new BigFileOutputStream(fileInputStream)).build();
    }  
}


服务器端代码:

    @Path(value = "/{bucketName}/{objectName}")
    @GET
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    public Response downloadObject(@PathParam(value = "bucketName") String bucketName,@PathParam(value = "objectName") String objectName,@Context HttpServletRequest request) throws FileNotFoundException
    {
    //    BucketObject bucketObject = objectManager.downloadObject(request.getHeader(CommonConstant.USER_TOKEN),CommonsUtil.generateSummary(request), bucketName, objectName);
        String fielname="C:\\"+bucketName+"\\"+objectName;
        //直接返回输出流
        File localFile = new File(fielname);
        FileInputStream fileInputStream = new FileInputStream(localFile);
        //return Response.ok(new BigFileOutputStream(bucketObject.getDataStream())).build();
        return Response.ok(new BigFileOutputStream(fileInputStream)).build();
    } 

小结:服务器端负责构建文件的输入流,客户端负责构建到新文件的输出流

参考:http://blog.csdn.net/caizhh2009/article/details/7221206

0 0
原创粉丝点击