【问题标题】:Hold HttpPostedFileWrapper in memory将 HttpPostedFileWrapper 保存在内存中
【发布时间】:2018-10-29 21:56:27
【问题描述】:

我的用户需要向我的网站添加照片。所以,他们使用<input type="file" />,他们看到了一点预览,然后他们必须去下一页确认一切。

在他们在确认页面上提交确认表单之前,我不想保存上传的照片。这与文件上传输入的页面不同。

HTML + 剃刀

<div class="control-group">
    @Html.LabelFor(m => m.SmallLogo, new { @class = "control-label" })
    <div class="controls">
        @Html.TextBoxFor(m => m.SmallLogo, new { type = "file" })
    </div>
</div>

型号

namespace Models.Registration
{
    [Serializable]
    public class Theme
    {
        [NonSerialized]
        private HttpPostedFileBase _SmallLogo;

        [DisplayName("Small Logo: ")]
        public HttpPostedFileBase SmallLogo
        {
            get { return _SmallLogo; }
            set { _SmallLogo = value; }
        }
    }
}

我不确定我需要从我的控制器发布什么,但基本上,我会在通过 HTTP POST 提交页面(表单)时更新模型。起初,在使用调试时,我可以将模型悬停,它们会显示为HttpPostedFileWrapper。然后我将模型字段类型更改为HttpPostedFileBase,但在那之后我收到一个关于它不可序列化的错误。

然后我关注了其他一些关于创建可序列化的私有字段的帖子,然后只是获取和设置该值。现在,当我在提交表单后暂停程序时,模式只是显示为空。太蹩脚了。

如果我遗漏了您需要帮助我的信息,请询问,我会为您获取!帮我帮你帮我! :D

【问题讨论】:

    标签: c# asp.net model-view-controller


    【解决方案1】:

    HTTP 是无状态的。

    因此,如果请求 1 上传文件,而您希望请求 2 保存文件 - 这将很难。

    您应该做的是让请求 1 将文件保存到位置 1(“临时”位置)。然后请求 2 可以将文件从位置 1 移动到位置 2(“最终”位置)。然后定期从位置 1 中删除旧的项目(例如一个月前最后一次更新)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 2011-10-31
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多