我在开发MVC应用程序时遇到了一个问题。
我从简单模型开始,用于视图,例如:
public class MyModel
{
public HttpPostedFileBase[] Files { get; set; }
public string Name { get; set; }
}
我有一个视图(Create.aspx)
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyModel>" %>
...
<form method="post" action="/My/Create" enctype = "multipart/form-data">
<input type="file" name="Files" />
...
<%:Html.TextBoxFor(item=>item.Name) %>
<input type="submit" value="Create" />
</form>
控制器:
public class ActionController: Controller {
public ActionResult Create() {
var myModel = new MyModel();
return View(model);
}
[HttpPost]
public ActionResult Create(MyModel model) {
if(ModelState.isValid) { /* save */ }
}
public ActionResult Edit(int id) {
var myModel = _manager.Get(id);
myModel.Files = /* what to do here ? */
return View(model);
}
[HttpPost]
public ActionResult Edit(MyModel model) {
if(ModelState.isValid) { /* edit */ }
}
}
我的问题:如何创建要发送的HttpPostedFileBase对象来查看和显示它们(参见下面的编辑页面)?
文件作为nvarchar存储在数据库中,并具有相对路径(作为标签)。
我想保留已保存的文件,只需更改名称字段。
从数据库中我收到一个存储文件路径,文件类型和文件流的对象。
对于编辑aspx页面:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyModel>" %>
...
<form method="post" action="/My/Edit" enctype = "multipart/form-data">
<input type="file" name="Files" />
/* display here the files */
...
<%:Html.TextBoxFor(item=>item.Name) %>
<input type="submit" value="Create" />
</form>
答案 0 :(得分:4)
您无法使用HttpPostedFileBase
来显示文件。
正如其描述所示:
用作提供对客户端上传的单个文件的访问权限的类的基类。
用于访问正在上传的文件。如果要显示已上传的文件,则必须使用其他方法,例如使用文件方法。
答案 1 :(得分:0)
您可以使用以下示例代码在视图中显示文件:
public FileContentResult ViewImage(/*parameters*/)
{
byte[] img = //TODO: take your image as byte array
return new FileContentResult(img, "image/jpeg");
}
和您的view
:
<img src="@Url.Action("ViewImage", "ControllerName", new { @*parameters*@ })">
但如果您只想在上传之前预览文件,则必须使用以下内容:
<强> HTML:强>
<p>Please specify an image file: <input type="file" name="datafile" id="datafile" size="40"></p>
<div id="preview"><img height="240" /></div>
<强> JS:强>
$(function() {
$('#datafile').change(function(e)
{
e.preventDefault();
var f = e.target.files[0];
if(f && window.FileReader)
{
var reader = new FileReader();
reader.onload = function(evt) { $('#preview>img').attr('src', evt.target.result); };
reader.readAsDataURL(f);
}
}
);
});
<强> FIDDLE 强>