代码之家  ›  专栏  ›  技术社区  ›  cjk

ASP.NET2中上载的文件放在哪里?

  •  9
  • cjk  · 技术社区  · 17 年前

    我正在建立一个允许用户上传文件的门户。我需要确保这些文件不包含病毒。我的理想解决方案是让主机OS AV监视临时文件夹并扫描任何传入文件。

    6 回复  |  直到 17 年前
        1
  •  9
  •   Chris Hynes    13 年前

    下面是ASP.NET处理文件的实际细节。它取决于版本,但2.0和所有后续版本都会在您有机会处理它们之前将上载写入磁盘。上述答案实际上是错误的——ASP.NET 2.0以上版本 将文件写入磁盘。如果您仔细想想,将上传加载到内存会让您面临DDOS漏洞,因为大型文件会占用越来越多的服务器内存。按版本,以下是ASP.NET的工作方式:

    • ASP.NET 1.0和1.1在您访问整个请求之前已将其加载到内存中。这意味着大文件可能会填满所有内存,导致异常,否则会导致服务器停机。

    • 从ASP.NET 4.0开始,上面引用的属性名称为HttpRuntime.CodegenDir:

      string uploadFolder=Path.Combine(HttpRuntime.CodegenDir,“上载”);

    至少现在它被缓存到磁盘上,这样就不会出现1.0和1.1版本的内存问题,但在完全检索之前,您仍然无法访问它。

        2
  •  8
  •   Cerebrus    17 年前

    我认为理想的方法是拥有一个“传入”文件夹,该文件夹已被授予ASP.NET保存文件所需的权限。我从未遇到过文件即使在您调用后仍保持锁定的情况 SaveAs

    请注意,FileUpload控件在调用之前不会上载文件 萨维亚斯 HttpInputStream ,当

    然后,您的AV应用程序可以自由扫描这些文件。如果出现错误,您可以向用户提供相关反馈。

        3
  •  3
  •   DomBat    17 年前

    您正在使用ASP FileUpload服务器控件吗?

    如果是这样的话,它将被加载到服务器内存中,直到您对其执行某些操作为止。

    这是来自MSDN;

    您可以在何处保存上传的文件没有固有的限制。但是,要保存文件,ASP.NET进程必须具有在指定位置创建文件的权限。此外,应用程序可能被配置为需要绝对路径(而不是相对路径)来保存文件,这是一种安全措施。

        4
  •  1
  •   sth    16 年前

    如果您对安全问题很认真,另一个相关提示是确保您要将文件保存到的文件夹位于webroot之上,以便用户无法以任何方式直接访问它。您仍然可以让他们通过一些数据库工作删除上载的文件,即保存位置并确保每个文件的名称唯一(如果用户正在验证,我只需将文件名保存为USERNAME.XYZ,其中XYZ是文件的扩展名)。

        5
  •  1
  •   Tracker1    14 年前

    • 您将项目推到队列中以便签入,例如30秒(足够AV扫描仪的时间)
    • 您对队列进行了另一次服务检查,如果队列在30秒内仍然存在,则将其标记为已完成/已处理
    • 您的UI将每10秒检查一次队列,查看是否完成,然后将其呈现给用户。

    此外,您可能希望使用7z.exe(7-zip命令行)提取任何归档文件。7-zip几乎可以提取我见过的每种归档类型,尽管它只支持新归档的几个压缩目标。

        6
  •  0
  •   Andrei Rînea    17 年前

    就像大脑一样,我会告诉你UploadFile控件 除非你告诉磁盘驱动器,否则不要向磁盘驱动器写入任何内容。

    推荐文章