2012-08-28 97 views
1

我正在编写一个应用程序来编辑mp3文件。编辑完成后,我想提供一个链接来下载文件。我只是担心文件位置(如果知道)可能会被滥用于非法文件。我需要做的是,我不需要在服务器上显示指向文件的链接,而是可以将其存储在内存中(我已经使用taglib),然后将下载流传送到服务器上,而不必将其存储在服务器上。asp.net隐藏下载

+1

如何将文件存储在内存中防止链接内容被“滥用于非法文件”? –

+0

@JonathanWood我认为这个想法是由UserA生成的内容不应该由UserB下载。 – Servy

+0

我将问题从“是/否”改为“如何”。第一个问题的答案是“是”,我认为这不是对你的充分答案。 – Servy

回答

2

您需要使用HTTP处理程序将文件写入用户,同时屏蔽服务器上文件的真实位置。这将使您能够执行任何关于下载文件的规则,例如一次下载。

参见:How to create an HTTP Handler

处理程序中的代码必须是唯一的你的需求,而是沿着以下的说法应该有所帮助:

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.ContentType = "Application/mp3"; 
    context.Response.AppendHeader("Content-Disposition", "attachment; filename=mysong.mp3"); 
    context.Response.TransmitFile(Server.MapPath("~/Files/song.mp3")); 
} 

你可以在情况下使用Stream你不不想在任何地方保存实际的文件,但这应该让你开始。

+0

发送一个文件谢谢你的代码。有一个问题,有趣的是你提到了一次下载..这确实是我想要的..你可以建议如何实现这个目标吗? – pessi

+0

您需要添加一些逻辑来确定是否允许用户下载文件。例如,您可以向DB添加一条记录,表示用户下载文件并在传输文件之前检查该记录。 –

+0

明白了。谢谢.. – pessi