在内存中保存HttpPostedFileWrapper

时间:2018-10-29 21:56:28

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

在我的用户需要将照片添加到我的网站的情况下。因此,他们使用<input type="file" />,他们会看到一些预览,然后必须转到下一页以确认所有内容。

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

HTML + Razor

<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,但是在那之后,我收到了有关无法序列化的错误。

因此,我接着关注了其他一些文章,内容涉及创建可序列化的私有字段,然后获取并设置该值。现在,当我在提交表单后暂停程序时,模式仅显示null。好la脚

如果我遗漏了您需要帮助的信息,请先询问,我会帮您解决!帮我帮你,帮我! :D

1 个答案:

答案 0 :(得分:2)

HTTP是无状态的。

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

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