【问题标题】:store HttpContext.Current.Request.Files in session variable将 HttpContext.Current.Request.Files 存储在会话变量中
【发布时间】:2009-04-28 15:30:03
【问题描述】:

我想将用户上传的文件存储在会话变量中,以便我可以从我想要的项目中的任何页面使用它。我正在从语句中检索文件:

httpFileCollection uploads=HttpContext.Current.Request.Files;

如何在会话变量中存储和检索它??

谢谢您

【问题讨论】:

    标签: c# asp.net session-state


    【解决方案1】:

    与您在会话状态中存储和检索 ANY 其他对象的方式相同:

    //Store
    Session["UploadedFiles"] = uploads;
    
    //Retrieve
    if (Session["UploadedFiles"] != null)
    {
      //try-catch blocks omitted for brevity. Please implement yourself.
      HttpFileCollection myUploads = (HttpFileCollection)Session["UploadedFiles"];
    
      // Do something with the HttpFileCollection (such as Save).
    
      // Remove the object from Session after you have retrieved it.
      Session.Remove("UploadedFiles");
    }
    

    在 Session 中存储这个对象是否明智值得商榷,但我不推荐它。

    关于 HttpFileCollection 变量不能存储在 Session 状态中的争论(参考您之前的问题),我反驳说,因为我过去能够做到这一点。将对象检索到变量中后,您可以随意保存它。

    【讨论】:

    • 以会话状态重新存储 - 这取决于您使用的会话提供程序。内存提供程序可能会起作用,但由于类型不可序列化,并且进程外存储将严重失败。所以依靠这个会很脆弱。特别是,您需要在进程外才能使其在网络场上正常工作。
    • @Marc:感谢您的评论。我知道在 Session 中存储这样一个对象的后果,并在我的回答中提到了它。
    【解决方案2】:

    那个Files对象仅限于当前请求;要在请求之间保留此内容,您需要对上传的数据执行某些操作 - SaveAs,或通过读取 InputStream

    IMO,出于可扩展性的原因,将其存储在会话中并不是一个好主意 - 例如,将文件写入磁盘上的共享暂存区并将路径存储在会话中会更自然。

    【讨论】:

      猜你喜欢
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      相关资源
      最近更新 更多