好久没有更新博客了,今天来再次总结一下,之前有整理过关于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. Docker安装Mysql数据库容器(zz)

    zz自:http://blog.csdn.net/chengxuyuanyonghu/article/details/54380032 1.下载mysql的镜像: sudo docker pull m ...

  2. python3随笔第一天

    1.python 语言没有{},注重书写格式,注重空格的使用,书写python程序一定要注意代码对齐,代码格式对齐是python程序书写的生命: 2.python 分支判断格式  if 条件 :  e ...

  3. pgjdbc源码分析

    一. 源代码目录结构 pgjdbc的源码结构如下图: 那么我们来一一看看各个模块都是做什么的吧. 1 core 该目录是程序的核心模块目录. 这里实现了大部分pgjdbc的基类和接口,例如statem ...

  4. maven下的sqlserver配置jar包

    看了两天的maven,开始把之前做的ssm项目搭建成maven项目,结果在sqlserver的依赖包上受阻,sqlserver需要sqljdbc4.jar包,经过一系列百度教程才得以解决,现在总结一下 ...

  5. Oracle.ManagedDataAccess.dll 连接Oracle数据库不需要安装客户端

    最开始,连接Oracle 数据是需要安装客户端的,ado.net 后来由于微软未来不再支持 System.Data.OracleClient 这个 Data Provider 的研发,从 .NET 4 ...

  6. python基础阶段练习题 拾英札记(1)

    python很灵活,学起来有人机交互的快乐感,贵在坚持. 做题对自学python很有帮助,融汇贯通-查漏补缺-巩固提高. 写了一些注释,希望能对您有所帮助. #1.输入一个3位数,计算个位.百位.十位 ...

  7. Python之uuid模块

    UUID是128位的全局唯一标识符,通常由32字节的字符串表示. 它可以保证时间和空间的唯一性,也称为GUID,全称为: UUID —— Universally Unique IDentifier P ...

  8. MySQL5.5编译安装以及Debug

    MySQL5.5以上版本安装是需要cmake 安装步骤: 设置编译参数cmake  -DCMAKE_INSTALL_PREFIX='/data1/guosong/mysql_debug'  -DDEF ...

  9. Python之文件与目录

    file 通常建议使用open()打开文件,file用于类型判断 如果要把数据写到磁盘上,除调用flush()外,还得用sync(),以确保数据从系统缓冲区同步到磁盘.close()总是会调用这两个方 ...

  10. canvas图表(3) - 饼图

    原文地址:canvas图表(3) - 饼图 这几天把canvas图表都优化了下,动画效果更加出色了,可以说很逼近echart了.刚刚写完的饼图,非常好的实现了既定的功能,交互的动画效果也是很棒的. 效 ...