我的文件上传存在问题。 这是我的控制器
public class StoreManagerController : Controller
{
private StoreContext db = new StoreContext();
//Some actions here
//
// POST: /StoreManager/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Book book, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
book.CoverUrl = UploadCover(file, book.BookId);
db.Books.Add(book);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.AuthorId = new SelectList(db.Authors, "AuthorId", "Name", book.AuthorId);
ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name", book.GenreId);
ViewBag.PublisherId = new SelectList(db.Publishers, "PublisherId", "Name", book.PublisherId);
return View(book);
}
private string UploadCover(HttpPostedFileBase file, int id)
{
string path = "/Content/Images/placeholder.gif";
if (file != null && file.ContentLength > 0)
{
var fileExt = Path.GetExtension(file.FileName);
if (fileExt == "png" || fileExt == "jpg" || fileExt == "bmp")
{
var img = Image.FromStream(file.InputStream) as Bitmap;
path = Server.MapPath("~/App_Data/Covers/") + id + ".jpg";
img.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
return path;
}
}
我的创建视图
@using (Html.BeginForm("Create", "StoreManager", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@/* divs here */@
<div class="editor-label">
Cover
</div>
<div class="editor-field">
<input type="file" name="file" id="file"/>
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Description)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
当我尝试上传文件时,我有一个默认的占位符。所以我认为帖子数据是空的。 但是当我用浏览器检查它时,我得到了下一个帖子数据
------WebKitFormBoundary5PAA6N36PHLIxPJf
Content-Disposition: form-data; name="file"; filename="1.JPG"
Content-Type: image/jpeg
我做错了什么?
答案 0 :(得分:1)
我能看到的第一件事是错的是有条件的:
if (fileExt == "png" || fileExt == "jpg" || fileExt == "bmp")
这永远不会返回true
,因为Path.GetExtension
包含'。'在文件扩展名中。听起来这可能是你的主要问题,因为这将简单地跳过条件块,你将留下你的占位符。这需要更改为:
if (fileExt == ".png" || fileExt == ".jpg" || fileExt == ".bmp")
但是,你的问题中有太多代码,很难确定这是否是唯一的问题。
如果您仍有问题,我建议您在控制器操作中放置一个断点(您尚未指定是Edit
还是Create
并检查file
的值是否为{{1}}正如预期的那样。你应该能够找出问题所在的位置 - 如果你仍然无法解决问题 - 至少可以将你的问题缩小一点。