好久没有更新博客了,今天来再次总结一下,之前有整理过关于jersey实现文件上传功能的相关知识,但是前一阵子在实习过程中写接口又要实现文件下载的功能,由于这些东西基本都是使用jersey提供的注解和接口来实现的,因此,实现起来就是有种套模板的感觉,废话不多说,我们来看看是如何实现的吧。

第一步,实现resource接口(注意上面的注解声明的返回类型):

     @POST
@Path("/export")
@Produces("application/x-msdownload")
public StreamingOutput exportIndicator(@HeaderParam("userId") int userId, EmotionDetailListPageModel emotionDetailListPageModel) {
//调用service实现业务
return CSVUtils.exportData(result); 7 }

其次,在CSVUtils里是返回的是什么内容呢?一下是该类所做的事情:将调用service得到的结果传入,返回一个实现了StreamingOutput接口的实例,实现该接口中的write方法,将java的对象写入流中,

注意在这里为了使得代码具有更好的扩展性,使用反射来获取对应对象中的数据。

  public static StreamingOutput exportData(List<EmotionDetailListModel> list) {

         return new StreamingOutput() {
@Override
public void write(OutputStream output) throws IOException, WebApplicationException {
Writer writer = null;
writer = new BufferedWriter(new OutputStreamWriter(output, "GB18030"));//GB18030
if (list.isEmpty()) {
throw new RuntimeException("没有要导出的数据");
}
// reflect to get file title
Field[] fAll = list.get(0).getClass().getDeclaredFields();
writer.write(generateTitle(fAll));
writer.write("\r\n"); for (EmotionDetailListModel emotionDetailListModel : list) {
try {
logger.info("write success" + parseModelToCSVStr(emotionDetailListModel));
writer.write(parseModelToCSVStr(emotionDetailListModel));
} catch (IllegalAccessException e) {
throw new RuntimeException("转换错误,错误信息:" + e);
}
writer.write("\r\n");
}
writer.flush();
}
};
}

我们可以看出,前端拿到的就是一个StreamOutput对象,当然,我们也可以将文件的名称和类型通过response传给前端,这样,下载的文件类型和名称都会是指定的名称。

   httpServletResponse.setHeader("Content-Disposition", "attachment; filename=\"" + emotionDetailListPageModel.getGameid() + "." + "csv" + "\"");
httpServletResponse.setHeader("Content-Type", "text/csv; charset=utf-8");

jersey实现文件下载的更多相关文章

  1. Jersey RESTful WebService框架学习(八)文件下载防乱码

    最近在做下载时候  不同浏览器下载的文件一直出现乱码,不知道怎么设置文件的编码,百度许久,找到一个解决办法如下 /** * 文件下载 * @param request * @return */ @GE ...

  2. ImageNet2017文件下载

    ImageNet2017文件下载 文件说明 imagenet_object_localization.tar.gz包含训练集和验证集的图像数据和地面实况,以及测试集的图像数据. 图像注释以PASCAL ...

  3. Android 浏览器 —— 使用 WebView 实现文件下载

    对当前的WebView设置下载监听 mCurrentWebView.setDownloadListener(new DownloadListener() { @Override public void ...

  4. C# 文件下载 : WinINet

    在 C# 中,除了 WebClient 我们还可以使用一组 WindowsAPI 来完成下载任务.这就是 Windows Internet,简称 WinINet.本文通过一个 demo 来介绍 Win ...

  5. ASP.net MVC 文件下载的几种方法(欢迎讨论)

    在ASP.net MVC 中有几种下载文件的方法 前提:要下载的文件必须是在服务器目录中的,至于不在web项目server目录中的文件下载我不知道,但是还挺想了解的. 第一种:最简单的超链接方法,&l ...

  6. 让IIS7.0.0.0支持 .iso .7z .torrent .apk等文件下载的设置方法

    IIS默认支持哪些MIME类型呢,我们可以这样查看:打开IIS管理器(计算机--管理--服务和应用程序--Internet信息服务(IIS)管理器:或者Win+R,输入inetmgr,Enter),在 ...

  7. Android中使用AsyncTask实现文件下载以及进度更新提示

    Android提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单.相对Handler来说AsyncTask更轻量级一些,适用于简单的异步处理,不需要借助线程和 ...

  8. 利用Tomcat内置的servlet实现文件下载功能

    起因 最近博客所在的VPS挂了又要重装系统,又要重装各种软件. 以前我也经常更换VPS,每次更换都是各种坑爹事情..比如要下载java.下载tomcat.下载mysql..........以前每次我都 ...

  9. 多个文件下载打包生成zip格式下载

    这个多个文件下载生成zip格式必须先引用一个ICSharpCode.SharpZipLib.dll. 代码如下  //将多个文件打包成压缩文件zip格式下载         protected voi ...

随机推荐

  1. LNMP架构部署

    第1章 部署LNMP架构步骤 1.1 ①部署Linux系统(OK) 基本优化完成(ip地址设置 yum源更新 字符集设置) 安全优化完成(iptables关闭 selinux关闭 /tmp/ 1777 ...

  2. 结合GET(),POST()实现一个简单、完整的服务器

    复习一下: 基础模块 作用 fs fs模块用于对系统文件及目录进行读写操作 http 创建服务器.e.g.http.createServer(); queryString 把url带的参数串转化为数组 ...

  3. 【开源】canvas图像裁剪、压缩、旋转

    前言 前段时间遇到了一个移动端对图像进行裁剪.压缩.旋转的需求. 考虑到已有各轮子的契合度都不高,于是自己重新造了一个轮子. 关于图像裁剪.压缩 在HTML5时代,canvas的功能已经非常强大了,可 ...

  4. C#实现将输入的数自动转换为科学计数法

    一朋友写了一个把输入的整型或浮点数转换为科学计数法表示的算法,写好后叫我去帮他看看有没有什么bug之类的没有考虑周全.我还没有细看就已经把我吓到了----整整写了将近三百行代码.我也没说他什么,只是回 ...

  5. [转载] ZooKeeper实现分布式队列Queue

    转载自http://blog.fens.me/zookeeper-queue/ 让Hadoop跑在云端系列文章,介绍了如何整合虚拟化和Hadoop,让Hadoop集群跑在VPS虚拟主机上,通过云向用户 ...

  6. springboot之banner

    1 在Main里面关闭 @SpringBootApplication@MapperScan("org.sselab.mapper")public class Application ...

  7. 六、VueJs 填坑日记之初识*.Vue文件

    上一篇博文中,我们将接口的地址通过webpack代理到了本地,解决了跨域的问题.在之前的文章中,我们一直对项目进行配置,并没有真正的切入正题,可能很多人还不明白我们要做什么?那么今天,我们就要开写代码 ...

  8. oracle数据库创建表,序列及添加代码案例

    create table cdpt( id number(6), name varchar2(30), constraint pk_id primary key(id) ); 更改数据库的“延迟段创建 ...

  9. 【转】Java中用单例模式有什么好处

    Java Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收( ...

  10. Hibernate级联之一对多和inverse解析

    hibernate的级联可以说是hibernate最重要的部分,只有深入了解了级联的特性与用法,才能运用自如. 这次讨论一对多的情况,所以就使用博客项目的用户表和博客表作为示例,来一起学习hibern ...