c# - 下载文件 - 防止第二次下载,直到第一次完成

标签 c# asp.net download

我的 ASP.NET 项目中有下载代码功能,下载代码如下所示。

public class Download : IHttpHandler
{    
    private void DownloadPsListingProduct(Guid which)
    {
        string path = GetFilePathFromGuid(which);

        FileInfo file = new FileInfo(path);
        HttpResponse response = HttpContext.Current.Response;        
        response.ClearContent();
        response.Clear();

        response.ContentType = "application/octet-stream";        
        response.AddHeader("Content-Disposition",
                           "attachment;filename=\"" + file.Name.NeutralizationCrlfSequences() + "\";");

        response.TransmitFile(file.FullName);
        response.Flush();
        response.End();

    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

当我一次下载单个文件时,这段代码就像一个魅力。 但是当一个文件正在下载过程中,我要求下载另一个文件时,它首先等待第一个文件下载完成,然后第二个文件开始下载。

注意:我正在发送下载每个文件的新请求。

我想避免这种单个文件下载行为,并且用户应该能够在不等待前一个文件完成的情况下下载文件。

最佳答案

ASP.NET Web API 2 应该能够以非常简单的方式处理这个问题。有一个例子 here ,但我会重申重要部分:

public class FilesController : ApiController
{
    public IHttpActionResult(Guid fileId)
    {
        var filePath = GetFilePathFromGuid(fileId);
        var fileName = Path.GetFileName(filePath);
        var mimeType = MimeMapping.GetMimeMappting(fileName);
        return OkFileDownloadResult(filePath, mimeType, fileName, this);
    }
}

当然,在 ASP.NET Web API 2 中连接路由等与连接 IHttpHandler 完全不同,但互联网上也有大量示例(包括此处的 SO)如何开始。

关于c# - 下载文件 - 防止第二次下载,直到第一次完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42245147/

相关文章:

c# - 如何创建一个可序列化的类,其中包含一组类中的一个类的实例

Chrome HTTP RANGE 中的 PHP 下载恢复无法正常工作

c# - 真正的并行下载

javascript - Firefox 4 和 ASyncFileUpload

winforms - 通过WebBrowser控件下载文件

c# - ReSharper 警告 : Base Class [NotNull] While Derived Class Property [CanBeNull] Conflict

c# - ListView 排序未设置 SortExpression 和 SortDirection

c# - 从异步回调调用同步方法调用?

asp.net - 如何使用 ASP.NET 主题为特定媒体指定样式表?

javascript - 表单计算字段不在报告页面 jquery 和 asp 上发布