代码之家  ›  专栏  ›  技术社区  ›  AndyDan

从OAS服务器下载大型文件到PC

  •  1
  • AndyDan  · 技术社区  · 15 年前

    我们有一个运行在Solaris OAS服务器上的Oracle 10g表单应用程序,表单显示在IE中。部分应用程序涉及使用Oracle的WebUtil实用程序从PC向OAS服务器上载和下载文件(主要是Word文档和PDF)。

    问题是大文件(任何超过25英里左右的文件)需要很长时间,有时需要几分钟。上传似乎可以,即使是大文件。但是,下载大文件会导致它在下载过程中出错。

    我用开发系统中的189MEG文件进行了测试。使用 WEBUTIL_FILE_TRANSFER.Client_To_DB (或) Client_To_DB_with_Progress ,大约24兆后下载会出错。我切换到 WEBUTIL_FILE_TRANSFER.URL_To_Client_With_Progress 最后下载了整个文件,但花了22分钟。在没有进度条的情况下做可以将时间缩短到18分钟,但这仍然太长了。

    我可以在浏览器中显示文件,我的测试文件将在5秒钟内显示出来,但许多文件需要下载进行编辑,然后重新上载。

    有没有想过如何更快地完成上传和下载?在这一点上,无论它是否使用WebUtil,我对几乎所有的想法都持开放态度。至少在某种程度上是Oracle的本地解决方案是首选,但我倾向于建议。

    谢谢, 安迪丹

    2 回复  |  直到 15 年前
        1
  •  0
  •   Jeremy Bourque    15 年前

    这可能是完全出去吃午饭了,但既然你在寻找任何可能有帮助的想法,这里是我的。

    首先,我假设文件的实际编辑发生在浏览器之外,而您只是在寻找一种更好的方法来来回获取文件。

    在这种情况下,我过去使用的一个选项是使用Apache或任何其他您喜欢的普通Web服务器围绕Web应用程序进行路由。要进行下载,请创建一个唯一的文件会话令牌,在Web应用程序中记住它,并将文件的副本(使用令牌命名)(例如<unique token>.doc),放在Apache可见的下载目录中。然后提供一个指向将通过Apache提供服务的文件的链接。

    对于上传,您有几个选项。一种方法是使用已有的机制,然后当文件上传时,只需在名称中的标记上进行匹配,就可以将文件修补回存档中。或者,您可以创建一个与应用程序分离的非常简单的文件上载表单,该表单将通过Apache将文件上载到临时目录,然后将用户路由回您的应用程序,并在URL HTTP GET样式或cookie中提供令牌。

    在解决所有这些问题之前,您需要确保您的普通Web服务器将提供比当前解决方案更好的上传和下载速度和可靠性,但它应该提供。

    顺便提一句,我不知道您使用的应用服务器是否提供HTTP压缩,但是如果提供了HTTP压缩,您应该确保它已启用并正常工作。这可能是提高大型文件传输速度所能做的最好的一件事,假设它们是相当可压缩的。如果您的应用服务器不支持它,那么大多数普通的Web服务器都支持它。

    希望有帮助。

        2
  •  0
  •   AndyDan    15 年前

    我最终使用客户机主机调用ftp命令来下载文件。我的189MB测试文件用20-22分钟下载 WEBUTIL_FILE_TRANSFER.URL_To_Client_With_Progress ,使用ftp仅需20秒。这不是最好的解决方案,因为它会让FTP密码暂时暴露在电脑上,但只会在下载过程中出现,即使这样,用户也必须知道在哪里可以找到它。

    因此,我们现在正在实现这一点,并寻找一个更安全但仍能发挥长期性能的解决方案。