Liferay 为什么是ServletResponseUtil。sendFile是否将文件作为页面内容发送?

Liferay 为什么是ServletResponseUtil。sendFile是否将文件作为页面内容发送?,liferay,Liferay,我想生成一个文件并像文件一样上传到磁盘 我卸载为 ServletResponseUtil.sendFile(httpServletRequest, httpServletResponse, fileName, baos.toByteArray(), ContentTypes.APPLICATION_OCTET_STREAM); 因此,文件不会作为文件上载到磁盘,而是作为文件上载到浏览器页面 �� ࡱ �; �� v���� ��������������������������������

我想生成一个文件并像文件一样上传到磁盘

我卸载为

ServletResponseUtil.sendFile(httpServletRequest, httpServletResponse, fileName, baos.toByteArray(), ContentTypes.APPLICATION_OCTET_STREAM);
因此,文件不会作为文件上载到磁盘,而是作为文件上载到浏览器页面

�� ࡱ �; �� v���� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������根条目�������� �FW� 工作手册������������ !� 摘要资料(���� D

响应头

HTTP/1.1 200 
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: private, no-cache, no-store, must-revalidate
Pragma: no-cache
Liferay-Portal: Liferay Community Edition Portal 7.2.0 CE GA1 (Mueller / Build 7200 / June 4, 2019)
Content-Disposition: attachment; filename="test.xls"
Content-Type: application/octet-stream;charset=UTF-8
Content-Length: 46080
Date: Tue, 24 Dec 2019 07:21:40 GMT

最有可能发生这种情况的原因是您正在portlet的操作或呈现方法中运行此代码。portlet仅呈现始终嵌入到正确HTML页面中的HTML页面片段。如果您通过获取HttpServletRequest和(更具体地说)对此进行模拟HttpServletResponse,您只需将门户的呈现输出与您自己的输出混合

您应该使用ServerSource方法来承载您的实现,在那里您甚至不需要恢复到HttpServletResponse,但可以将您的输出流式传输到RenderResponse


即使您最终没有混合HTML/XLS内容,但只看到实际的XLS输出,您也可能会干扰Liferay的SPA加载程序,您可以假设它知道预期的返回值,例如,在渲染时,它需要的是HTML门户页面,而不是二进制数据。当您使用ServerSource方法时,情况并非如此,因为它需要o返回任意mimetype。

您可能正在将文件上载到服务器或从服务器下载。因为顾名思义,
sendFile
通常用于将文件内容发送到客户端(即web浏览器)。