asp.net - 创建临时下载链接

标签 asp.net file download hyperlink webpage

我使用 ASP.NET
我需要为用户提供从服务器下载文件的临时链接。
它应该是一个临时链接(页面),可以在短时间内(例如 12 小时)使用。我如何生成此链接(或带有链接的临时网页)?

最佳答案

这是一个相当完整的示例。

首先是一个使用 secret 盐和到期时间创建短十六进制字符串的函数:

public static string MakeExpiryHash(DateTime expiry)
{
    const string salt = "some random bytes";
    byte[] bytes = Encoding.UTF8.GetBytes(salt + expiry.ToString("s"));
    using (var sha = System.Security.Cryptography.SHA1.Create())
        return string.Concat(sha.ComputeHash(bytes).Select(b => b.ToString("x2"))).Substring(8);
}

然后是生成一周有效期链接的片段:

DateTime expires = DateTime.Now + TimeSpan.FromDays(7);
string hash = MakeExpiryHash(expires);
string link = string.Format("http://myhost/Download?exp={0}&k={1}", expires.ToString("s"), hash);

如果提供了有效链接,最后是发送文件的下载页面:

DateTime expires = DateTime.Parse(Request.Params["exp"]);
string hash = MakeExpiryHash(expires);
if (Request.Params["k"] == hash)
{
    if (expires < DateTime.UtcNow)
    {
        // Link has expired
    }
    else
    {
        string filename = "<Path to file>";
        FileInfo fi = new FileInfo(Server.MapPath(filename));
        Response.ContentType = "application/octet-stream";
        Response.AddHeader("Content-Disposition", "attachment;filename=" + filename);
        Response.AddHeader("Content-Length", fi.Length.ToString());
        Response.WriteFile(fi.FullName);
        Response.Flush();
    }
}
else
{
    // Invalid link
}

您当然应该将其包装在一些异常处理中以捕获损坏的请求。

关于asp.net - 创建临时下载链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5703201/

相关文章:

c# - 如何在我的项目中使用 AntiXss?

c# - 快速变化的业务线应用程序的 asp.net 3.5 构建管理的最佳实践是什么

c# - 改变输出流的位置

Android TCP 快速启动配置

c# - 如何在没有浏览器的情况下与网站互动?

asp.net - 如何将 mailSettings\smtp 与 configSource 和 from 属性一起使用?

python - 从目录树中获取任意文件

javascript - HTML5 FileList 和 JQuery 各自

asp.net - IIS7 + ASP.NET 大媒体文件下载

jquery - 如何获取下载图片的完整路径?