java resteasy restful webservice教程(六):实现文件下载功能实例文章来源:爱上123 原文地址:http://www.ishang123.com/jishubowen/
来源:互联网 发布:网络架构师英语怎么说 编辑:程序博客网 时间:2024/05/01 09:46
关键字:java,resteasy,restful,webservice,教程,文件下载,实例
编辑推荐:
1. java resteasy restful webservice教程(一): 使用 servlet Filter 注册服务类实例
2. java resteasy restful webservice教程(二): 使用 servlet Filter 注册服务类实例
3. java resteasy restful webservice教程(三): 文件上传---非form提交方式实例
4. java resteasy restful webservice教程(四): resteasy与spring集成发布webservice 服务实例
5. java resteasy restful webservice教程(五): 文件上传---非form提交方式实例
6. java resteasy restful webservice教程(六): 实现文件下载功能实例
在以前的文章中提到了文件的上传,有同学询问基于resteasy下载的实现,故本篇文章主要描述如何实现下载
配置和框架的搭建都不罗嗦了,请查看以前的文章
先贴出下载的代码
www.ishang123.com 复制内容到剪贴板折叠展开Java 代码
/**
* 下载对象
* @param bucketName
* @param objectName
* @param request
* @return
*/
@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)
{
BucketObject bucketObject = objectManager.downloadObject(request.getHeader(CommonConstant.USER_TOKEN),CommonsUtil.generateSummary(request), bucketName, objectName);
//直接返回输出流
return Response.ok(new BigFileOutputStream(bucketObject.getDataStream())).build();
这段代码比较简单:重点关注响应的实体类BigFileOutputStream,其传入的构造参数是一个输入流
该类的具体实现如下,其实关键的需要实现javax.ws.rs.core.StreamingOutput类,重写其write方法,将你得数据输出到write方法中得输出流中即可,resteasy框架会将其流直接输出到客户端
www.ishang123.com 复制内容到剪贴板折叠展开Java 代码
/**
* 实现用于直接响应一个输出流
* @author maomao
*
*/
public class BigFileOutputStream implements javax.ws.rs.core.StreamingOutput {
private InputStream inputStream;
public BigFileOutputStream(){}
public BigFileOutputStream(InputStream inputStream)
{
this.inputStream = inputStream;
}
@Override
public void write(OutputStream output) throws IOException,
WebApplicationException {
// TODO Auto-generated method stub
IOUtils.copy(inputStream, output);
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
}
客户端调用代码如下
www.ishang123.com 复制内容到剪贴板折叠展开Java 代码
//下载文件
private void downLoadObject()
{
String bucket = "EBOXTEST123456"; //上传的桶
String objectName = "wangpan114daitupian.png"; //上传的对象名
String urlResouce = bucket + "/" + objectName;
String baseURL = "http://10.28.1.37:8080/application_interface_manager/platform/";
String hostURL = baseURL + urlResouce ;
String httpMethod = "GET";
String requestDate = new Date().toString();
try{
File localFile = new File("x:\\1142.png");
//生成摘要用于签名
String summary = httpMethod + "\n" // create StringToSign
+ "\n" // no Content-Md5 Filed
+ "\n" // no Content-Type Filed
+ requestDate + "\n" // Date Filed---must
+ urlResouce; //must
//创建客户端签名
String clientToken = new CreateSignTokenImpl().getToken(summary,secretKey);
HttpURLConnection urlConnection =
(HttpURLConnection) (new URL(hostURL)).openConnection();
urlConnection.setRequestProperty("Token", "jingdong "+accessKey+":"+clientToken);
urlConnection.setRequestProperty("Date", requestDate);
urlConnection.setDoInput(true);
urlConnection.setRequestMethod(httpMethod);
InputStream is = urlConnection.getInputStream();
// FileUtils.copyInputStreamToFile(is, localFile);
try {
OutputStream op = new FileOutputStream(localFile);
byte [] bts = new byte[1024];
int n = 0;
while(-1 != (n = is.read(bts)))
{
op.write(bts, 0, n);
}
// op.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println(urlConnection.getResponseCode());
}
catch(Exception e)
{
e.printStackTrace();
}
}
其实看着复杂,实际上很多代码不重要(偷懒把项目客户端调用代码直接copy过来了),关键就是从HttpUrlConnect处获取输入流(即是服务端输出流输出的数据),将其写入到文件即可
文章来源:爱上123 原文地址:http://www.ishang123.com/jishubowen/java/2012-09-15/229.html
- java resteasy restful webservice教程(六):实现文件下载功能实例文章来源:爱上123 原文地址:http://www.ishang123.com/jishubowen/
- java文件读取大全(原文地址:http://www.rrzhai.com/p/32023)
- java反射详解-原文地址:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html
- Ubuntu 10.04地址导航栏修改为显示路径 本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/20
- 原文:一套HTML网站后台信息管理静态网页模版下载 源代码下载地址:http://www.zuidaima.com/share/1821271068036096.htm 体验地址:http://18
- 初步使用ngrok 原文地址 http://qydev.com/ 下载
- java中的类加载器(原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-classloader/)
- restful文件下载功能实现
- restful文件下载功能实现
- 在U-boot下实现自动识别启动Flash的原理 本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/201
- RESTEasy和restful WebService
- 利用resteasy框架构建rest webservice----第三波:实现文件上传---非form提交方式(实例、教程)
- 利用resteasy框架构建rest webservice----第三波:实现文件上传---非form提交方式(实例、教程)
- 跨平台(WIndows, Linux, VxWorks) getTickCount实现 本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.li
- jquery可拖动表格调整列格子的宽度大小 本文章来源于 代潇瑞博客 原文地址:http://www.daixiaorui.com/read/98.html
- 利用resteasy框架构建rest webservice----第二波:使用不同的方式让resteasy发布我们的restful webservice 服务(实例、教程)
- 利用resteasy框架构建rest webservice----第四波:resteasy与spring真正集成发布我们的restful webservice 服务(实例、教程)
- 利用resteasy框架构建rest webservice----第二波:使用不同的方式让resteasy发布我们的restful webservice 服务(实例、教程)
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数
- DG broker使用dgmgrl配置及start fast failover
- 开启otl的64位长整数支持
- 树(二)二叉树递归和非递归遍历
- 企业如何通过软件实施汽车配件管理
- java resteasy restful webservice教程(六):实现文件下载功能实例文章来源:爱上123 原文地址:http://www.ishang123.com/jishubowen/
- Hibernate Tools的使用
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深入解析gtest
- 深入探讨 Java 类加载器
- 上一篇关于android通知栏点击回不到应用程序的问题进一步研究
- CombBox 拓展 Tag 属性
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之八 - 打造自己的单元测试框架
- 设计模式--责任链模式
- cocos2d-x学习之路(7)--Shaer的使用