从服务器上传并返回多个HttpPostedFiles

时间:2015-09-07 13:54:15

标签: javascript html asp.net asp.net-mvc razor

我为多张图片上传创建了一个简单的机制。

正在将文件正确上传到服务器,但是当我在服务器端出现错误时,我会ModelState.AddModelError("PostedPhotos", "Error msg");并将我的viewmodel传递回视图,我想再次显示此错误和图片预览

不幸的是,PostedPhotosnull。也许我以错误的方式绑定了一些东西。

在我的viewmodel中PostedPhotos是:

public List<HttpPostedFileBase> PostedPhotos { get; set; }

在我看来:

@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
   @Html.TextBoxFor(m => m.PostedPhotos, new { name = "PostedPhotos[]", type = "file", multiple = "multiple" })
}

是否可以将我的文件传回去?我想做一些像愚蠢的解决方法。我可以使用单个HttpPostedFileBase创建隐藏的输入,然后使用jQuery设置$(myPostedPhotosInput)[0].files = getFilesFromTrickySingleFileInputs();,但我不喜欢它。

1 个答案:

答案 0 :(得分:1)

您无法使用return View()返回文件输入的值。你也不能使用jquery设置值。这样做将是一个重大的安全问题。有人可以创建一个包含多个隐藏文件输入的站点,将值设置为常用文件名(例如C:\ password.doc)并在您不知情的情况下下载文件。

如果您返回视图,则用户需要重新选择文件。作为替代方案,您可以在首次提交时保存文件(可能是临时位置)并返回文件名(视图模型或ViewBag属性),以便您可以通知用户这些文件已上载并且不需要重新选择。