起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5765|回复: 8

[结贴] bex5 action内如何把服务端文件输出给访问的浏览器,最终实...

[复制链接]

354

主题

945

帖子

2428

积分

金牌会员

Rank: 6Rank: 6

积分
2428
QQ
发表于 2017-3-22 15:12:56 | 显示全部楼层 |阅读模式
版本: 小版本号:
数据库: 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
bex5 action内如何把服务端文件输出给访问的浏览器,最终实现服务器上文件的下载功能?获取response 对象,往外输出,但是最后报错
代码如下:
public static void getAttachmentStreamByAttachmentId(String attachmentId) throws IOException{
                HttpServletResponse response=ContextHelper.getRequestContext().getResponse();
               
                //start test
                String path="d://web servlet.jpg";
                 File file = new File(path);// path是根据日志路径和文件名拼接出来的
                    String filename = file.getName();// 获取日志文件名称
                    InputStream fis = new BufferedInputStream(new FileInputStream(path));
                    byte[] buffer = new byte[fis.available()];
                    fis.read(buffer);
                    fis.close();
                    response.reset();
               
                    // 先去掉文件名称中的空格,然后转换编码格式为utf-8,保证不出现乱码,这个文件名称用于浏览器的下载框中自动显示的文件名
                    response.addHeader("Content-Disposition",
                                    "attachment;filename=" + new String(ossObjectKey.split("/")[1].replaceAll(" ", "").getBytes("utf-8"),
                                                    "iso8859-1"));
                    response.addHeader("Content-Length", "" + file.length());
                    OutputStream os = new BufferedOutputStream(response.getOutputStream());
                    response.setContentType("application/octet-stream");
                    os.write(buffer);// 输出文件
                    os.flush();
                    os.close();
        }



报错如下:
2017-03-22 15:05:39 getOutputStream() has already been called for this response
java.lang.IllegalStateException: getOutputStream() has already been called for this response
        at org.apache.catalina.connector.Response.getWriter(Response.java:611)
        at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198)
        at com.justep.business.server.BusinessServerServlet.execService(Unknown Source)
        at com.justep.business.server.BusinessServerServlet.service(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
        at com.justep.x.bs.BusinessServerServlet.service(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:745)



91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36067
发表于 2017-3-22 16:02:27 | 显示全部楼层
服务器下载直接在java中操作就可以,为什么要传给浏览器
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

354

主题

945

帖子

2428

积分

金牌会员

Rank: 6Rank: 6

积分
2428
QQ
 楼主| 发表于 2017-3-22 18:24:10 | 显示全部楼层
jishuang 发表于 2017-3-22 16:02
服务器下载直接在java中操作就可以,为什么要传给浏览器

是web项目,客户在浏览器上点击下载按钮,想把项目目录里面的某个文件下载下来。
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36067
发表于 2017-3-23 09:30:55 | 显示全部楼层
那是客户端的下载吧,参考/UI2/demo/actions/process/invokeAction/mainActivity.w
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

354

主题

945

帖子

2428

积分

金牌会员

Rank: 6Rank: 6

积分
2428
QQ
 楼主| 发表于 2017-3-23 11:35:55 | 显示全部楼层
jishuang 发表于 2017-3-23 09:30
那是客户端的下载吧,参考/UI2/demo/actions/process/invokeAction/mainActivity.w

在下载文件的java方法内我需要根据参数对数据库进行操作,然后下载文件,该怎么做
这个例子里面看下载块儿的代码是在ui目录的java里面,在biz action内如何写
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36067
发表于 2017-3-23 14:51:55 | 显示全部楼层
下载的时候调用的有action啊
action.png
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

354

主题

945

帖子

2428

积分

金牌会员

Rank: 6Rank: 6

积分
2428
QQ
 楼主| 发表于 2017-3-23 17:46:32 | 显示全部楼层
jishuang 发表于 2017-3-23 14:51
下载的时候调用的有action啊

哦哦,了解了。我一直在看url的那个.j文件,我还以为需要写到这个.j文件内。
这个.j文件是不是可以复用,我自己的业务模块里面如果有3个这样的下载附件功能,是不是在自己业务模块内放入一个.j这个文件就行?
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36067
发表于 2017-3-24 08:50:38 | 显示全部楼层
可以
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复

使用道具 举报

354

主题

945

帖子

2428

积分

金牌会员

Rank: 6Rank: 6

积分
2428
QQ
 楼主| 发表于 2017-3-24 09:41:40 | 显示全部楼层

了解了,可结贴
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-24 11:27 , Processed in 0.078834 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表