【问题标题】:How would I confirm a successful download in a browser without using ActiveX/Java?在不使用 ActiveX/Java 的情况下,如何在浏览器中确认成功下载?
【发布时间】:2010-09-23 20:58:11
【问题描述】:

客户正在构建一个基于网络的数字资产管理系统。这是场景:我们有一个大文件,比如 100 MB 或更大。客户端需要跟踪请求下载该文件的时间(简单)以及该下载是否成功。大文件需要一段时间才能下载,因此几乎需要某种回调该文件何时完成下载到机器。

在 IE 中,您有打开/保存/取消对话框。如果你有 Chrome/FF,它是一个下载管理器。我不确定是否有任何事件可用于确定文件是否完成下载。

如果没有某种 ActiveX 控件或 Java 小程序来报告该文件是否成功下载,我将如何做到这一点。

【问题讨论】:

标签: browser


【解决方案1】:

这篇博文就是这个问题的答案。诀窍是以 1024 个数据包的形式下载此文件,然后确认总数。从文档库下载文件时,我能够将此逻辑与 SharePoint 功能一起使用。当下载成功或失败时,我会更新自定义列表。

http://www.codeproject.com/KB/aspnet/Download_Track.aspx

//Dividing the data in 1024 bytes package
int maxCount = (int)Math.Ceiling((FileName.Length - startBytes + 0.0) / 1024); 

//Download in block of 1024 bytes
int i;
for(i=0; i < maxCount && Response.IsClientConnected; i++)
{
    Response.BinaryWrite(_BinaryReader.ReadBytes(1024));
    Response.Flush(); 
}

然后我们将传输的数据包数量与我们通过将文件长度除以1024计算的数据包总数进行比较。如果两个参数相等,则表示文件传输成功并且所有数据包都已传输。如果传输的数据包数小于数据包的总数,则说明存在问题,传输未完成。

//compare packets transferred with total number of packets
if (i < maxCount) return false;
return true;  
//Close the Binary reader and File stream in final block.


//Close Binary reader and File stream
_BinaryReader.Close();
myFile.Close(); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2021-01-13
    • 2022-11-14
    • 1970-01-01
    • 2018-12-03
    • 2012-01-26
    相关资源
    最近更新 更多