hexllo 发表于 2021-4-25 10:27:47

使用版本为15,请问点导出时生成的临时文件是存放在什么地方?

本帖最后由 Crystal.Li 于 2021-4-25 11:05 编辑

我们使用的是15版本,
在生产环境部署了2台服务器作负载,
导出的时候有时报404,
我们的存储是使用S3,但生成的供导出用的临时下载文件却没生成到S3上,
app.UseReporting(settings =>
            {
                settings.UseCustomStore(midwareFuncs.GetTemplateMetadataFunc);
                settings.LocateDataSource = midwareFuncs.LocateDataSourceFunc;
            });


请问这种临时文件是存放在哪里的,是内存吗,有没有办法改写他的存储位置,谢谢!

Crystal.Li 发表于 2021-4-25 10:27:48

您好,研发团队耗费了大量的时间和人力来排查该问题,最终发现print接口没有cookie是因为print请求是从iframe中发出的,在打印报表时,会显示”准备打印中...“ 的对话框,从这里发出的请求是从iframe中发出,由于浏览器安全策略,会限制发送cookie。
解决方案:您可以移除掉产品自带的打印按钮,添加自定义导出的按钮,通过以下代码可以移除自带导出按钮:
viewer = GrapeCity.ActiveReports.JSViewer.create({
element: '#viewerContainer'
});
viewer.toolbar.desktop.removeItem("$print");

Crystal.Li 发表于 2021-4-25 11:07:22

您好,我们报表导出是客户端发起请求,服务端生成,再返回给客户端。
您需要这个文件是做什么用途呢?

hexllo 发表于 2021-4-25 17:52:39

主要是用来导出,因为在2台服务器部署了ActiveReports15,
所以导出的时候可能请求发到A服务器上,但导出生成的临时文件可能在B服务器上,所以不能正常导出

Crystal.Li 发表于 2021-4-25 18:10:45

hexllo 发表于 2021-4-25 17:52
主要是用来导出,因为在2台服务器部署了ActiveReports15,
所以导出的时候可能请求发到A服务器上,但导出生 ...
您是导出任何类型的文件都是会报错吗?
我们保存的时候会生成临时文件,导出时应该没有临时文件。您导出失败的时候打个断点看一下,看导出时具体的地址是什么?具体报什么错

hexllo 发表于 2021-4-26 09:57:50

是的,任何文件都是,时不时报404,
我理解流程是这样的,整个流程分为2次请求:
1,请求api/reporting/session/-2sF7P4-eUCJPA8oEi1NVA/export/xls返回一个导出ID
{"exportId":"XI-U9cJo8EKFlzx2-YCiGQ"}

2,根据该 ID去服务器取文件api/reporting/export/XI-U9cJo8EKFlzx2-YCiGQ

如果第一次请求发到A服务器,生成了一个文件并返回ID,第二次请求发到了B服务器,找不到该ID对应的文件,所以就404了

Crystal.Li 发表于 2021-4-26 11:01:34

您好,这个问题我们现在了解了。我们需要找研发同事调查一下该问题,看是否有什么好的解决方案,还请您耐心等待一下,有结果第一时间回复您!

zhaorong 发表于 2021-5-10 12:04:38

这个问题处理的怎么样了?什么时候能好?

Crystal.Li 发表于 2021-5-10 13:39:35

您好,这个我们向开发同事确认了,这个属于您服务器配置的问题,负载均衡需要配置粘性会话。您可以参考aws的文档:
https://docs.aws.amazon.com/zh_c ... ticky-sessions.html

zhaorong 发表于 2021-5-10 16:11:35

跟运维同事确认了是粘性会话
页: [1] 2 3
查看完整版本: 使用版本为15,请问点导出时生成的临时文件是存放在什么地方?