如何在asp.net中将文件作为下载链接提供?

时间:2013-04-24 09:40:37

标签: asp.net file-upload

在我的asp.net网站上,用户可以上传多个文件,这些文件位于服务器硬盘上的“upload”文件夹中。我通过用用户名+原始文件名重命名来保存文件 示例:如果我上传文件'user.text'并且我的代码是1000,那么该文件将保存在名为'1000_user.Text'的上传文件夹中。这是为了针对特定用户识别文件。 现在,当管理员登录应用程序并选择用户时,他应该能够看到他/她上传的所有文件。文件应该是可下载的格式给他。

我怎样才能达到同样的目标?我完全不知道,怎么去呢?

4 个答案:

答案 0 :(得分:0)

这不是你在SO上提问的方式。无论如何已经有了一条建议:

  1. 将您的文件存储在Webroot的外部,并使用您网站中的脚本获取文件并将其呈现给用户。这是出于安全原因:如果有人设法上传恶意文件,您不希望他能够从网上执行它。
  2. 在数据库中存储文件信息和上传信息:谁上传了什么以及何时上传?依靠文件名不是一个好主意。您最终也可以将文件存储在数据库中(作为BLOB),但我更喜欢好的旧文件系统

答案 1 :(得分:0)

我可以根据可行性建议你几种方法。方法1 - 如果您可以更改数据库,当用户上传文件时,您应该为数据库中的用户保存动态生成的文件名。这样,当管理员登录并想要查看用户上传的所有文件时,您只需要进行数据库查询并在网格中显示它们。当用户单击文件名时,您可以从硬盘获取文件并允许其下载到管理员。

如果数据库更改不可行,您的任务将更加困难。您必须在目录中使用所有文件中的用户名进行查询。您可以使用LINQ使这项任务变得更容易。获得所有列表后,将其显示给管理员。

答案 2 :(得分:0)

我建议您在数据库中保存有关该文件的元数据(如原始文件名和用户名)。然后,您可以使用此元数据来查找用户已上载的文件。为磁盘上的文件名提供基于数据库表中唯一ID的文件名。这样,用户可以上传具有相同名称的多个文件。确保此文件夹不在您的应用程序中,以便出于安全原因可以使用URL访问它们。

答案 3 :(得分:0)

实现这一目标的最佳推荐方法是使用数据库,它与Gallery的模块相同,其中用户拥有相册和相册中的一些图片。管理员可以查看相册中每个用户的相册和图片。你必须在数据库中引入两个表。我有上传文件的类别信息(主表)和其他具有文件本身信息的表(详细信息表)。

另一种方法是为应用程序中的文件类别为每个用户创建一个分层文件夹目录,然后以递归方式读取目录和字段,然后将它们列出来向应用程序用户显示。如果文件数量增加,这将是昂贵的。