ASP.NET的临时文件下载链接
我想知道如何在有限的时间内为我的文件生成临时下载地址.我知道这不是最好的做法,可能使用HttpHandlers是根据
http://www.devx.com/codemag/Article/34535/1954的方法
但我很想知道如何使用urlrewriting来使用GUID或其他一些神秘的命名技术生成文件名,并使其在有限的时间内可用. 如果有人给我一篇关于它的好文章,我会很感激. 解决方法
首先,您需要某种形式的标识符.你建议一个GUID,这很容易做到,Guid.NewGuid().ToString(“n”)为你提供了这样的标识符.
你谈到URI重写,但这真的只是一点点抛光.您当然可以进行一些重写,将/ myFiles / a948ec43e5b743548fd9a77c462b953e转换为/myFiles/download.aspx?id=a948ec43e5b743548fd9a77c462b953e,甚至(在检查查找表后)到myFiles / download.aspx?id = 3或myFiles / download.aspx?文件名= myNewDownload.pdf.这与任何其他URI重写任务相同,所以现在让我们忽略它并假设我们有一个请求进入/myFiles/download.aspx?id=a948ec43e5b743548fd9a77c462b953e,无论是否是由于重写. 好的.你有一个标识符,你需要将它与三个东西相匹配:一个流,一个内容类型和一个到期日. 您可以将所有这些存储在文件系统中,所有这些都存储在数据库中或数据库中的详细信息中,包括将流存储为文件系统中文件的路径. 让我们说它存储在文件系统中,名称如下: a948ec43e5b743548fd9a77c462b953e.application_pdf和a5d360178ec14e97abd556ed4b7709cf.text_plain; charset = utf-8 请注意,我们没有使用普通的Windows文件扩展名,因此我们很好地处理了上传机器与您的服务器绑定不同的情况. 如果a948ec43e5b743548fd9a77c462b953e是需要的项目,我们首先查看创建日期,如果它太久以前(文件已过期),我们发送一个410 GONE标题,并显示一条错误消息,说明文件已过期(我们也可以删除此时文件清理用法 – 或者可能截断它以使其保留文件曾经存在的记录,但是存储为0字节. 否则,我们将Response.ContentType设置为“application / pdf”,然后将Response.TransmitFile设置为发送文件. 如果我们以不同于文件的方式存储流,我们希望以小块(4096很好地匹配系统其他部分中的其他缓冲区)发送它,并且在它是非常大的调用响应的情况下.定期刷新()以防止内存问题. 这是你完成的基本系统. Niceties将包括存储原始文件名并将其发送到内容处置标头中,并遵守Range请求,以便用户可以恢复失败的下载而不必从头开始. 所有这些都与用于确保只有正确的人拥有该文件的任何身份验证非常正交 – 您可以将其与任何类型的登录系统一起使用,或者您可以将其公开但有时间限制. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET中的缓存控制标头不输出max-age
- 自KB4338419以来,无法再从Classic ASP创建C#COM对象
- asp.net-mvc-3 – 不能使用NuGet PagedList ASP.NET MVC#查
- asp.net – 什么是Container.DataItem?
- asp.net-mvc – IIS7 ASP.NET MVC客户端缓存标头不起作用
- asp.net – 使用Python Mechanize进行屏幕分析aspx – Java
- asp.net – Web部署安装程序(MSI)中没有“IIS 7部署处理程序
- asp.net – NullReferenceException在PipelineStepManager.
- asp.net – Visual Studio 2008 – 解决方案的条件编译符号
- ASP.NET登录/成员资格 – 如何注销?