0

我需要编写一个文本文件查看器(不是目录树,而是实际的文件内容)以在浏览器中使用。它将用于查看大文件。我想让用户能够真正 ummm 浏览文件,即上一页和下一页按钮,而每个页面将只显示文件的一部分。

两个问题:

  • 无论如何通过POST(或其他东西)传递文件描述符,以便在每个页面上我可以继续从已经打开的文件中读取,而不是重新开始(再次 - 大文件)
  • 有没有办法向后读取文件?对于浏览回文件非常有用。

非常欢迎任何其他实现想法。谢谢

4

3 回答 3

3

在请求之间保持文件打开不是一个好主意 - 您不必“重新开始” - 只需保持一个偏移量并使用fseek()跳转到该偏移量。这样,你也可以实现“向后跳跃”。

于 2009-08-16T10:23:43.660 回答
1

将您的大文件切成小文件一次,然后将小文件提供给用户。

于 2009-08-16T10:21:13.073 回答
0

你应该考虑分页。如果您担心用户因需要经常单击“下一步”而感到沮丧,您可以使每个块相当大(因此普通阅读器每 20 分钟翻页一次)。

另一种选择是 Chunked-Endoding 传输类型:Wikipedia Entry。这将允许您的服务器快速响应并在通过网络流式传输文件的其余部分时为用户提供可读取的内容(而不是服务器需要读取文件并一次发送所有文件)。与正常提供文件相比,这可以显着提高感知性能,但仍会为您的服务器消耗大量带宽。

您也许可以使用 Javascript 和 AJAX 模拟大型文档,但一次只能发送多个文件以获得更好的性能。

考虑发送几页文档,并将监听器附加到浏览器的滚动事件。随着时间的推移或用户向下滚动你 AJAX 更多的块。这会产生一些烦人的 UX 边缘情况,例如:

  • 滚动条表示文档比实际小得多
    • 您可以通过在文档底部填充许多分页符来避免这种情况,但是很难使长度完美。
  • 滚动超过当前可用内容的点将显示一个空白页面。
    • 您可以使用 JavaScript 检测到这一点并显示“加载”图标让用户知道发生了什么。
  • 内置“查找”功能不起作用
    • 如果用户不下载整个文档,很难避免这种情况,但您可以提供自己的搜索功能供他们使用(虽然效果不佳但可能足够)。

确实,您可能最好使用中等大小的页面进行分页。这是一种非常容易理解的设计模式,相对容易(至少与其他选项相比)实施和快速实现。

希望有帮助!

于 2009-08-16T23:57:39.757 回答