仅提供一些初始上下文,我有一个ASP.NET MVC应用程序,用户可以在其中创建一个帐户,登录并填写一系列可以随时保存的表格。这些表格由不同的选项卡分隔。在选项卡之一中,用户可以上传和下载JPEG和PDF文件。此功能已实施了几周,起初它运行良好。文件上传没有问题,我可以下载它们,打开它们并查看其内容而不会出现问题。但是最近,每次我上载PDF或JPEG文件时,下载并打开它时,总是会出现错误。对于JPEG文件,我总是收到一条错误消息,指出不支持文件类型。对于PDF,我总是会收到一条错误消息,指出文件无法加载。请记住,自从我第一次实现并注意到它可以工作以来,我从未接触过此代码。
这是有问题的代码。上面的功能负责上传PDF和JPEG文件。另一个负责下载所述文件:
[HttpPost]
public ActionResult Upload(Documento documento, HttpPostedFileBase file)
{
int userId = (int)Session["userID"];
using (LoginDataBaseEntities1 dbModel = new LoginDataBaseEntities1())
{
try
{
if (file != null && file.ContentLength > 0)
{
if (this.IsJpeg(file) || this.IsPdf(file))
{
var fileName = Path.GetFileName(file.FileName);
MemoryStream target = new MemoryStream();
file.InputStream.CopyTo(target);
byte[] data = target.ToArray();
Documento doc = new Documento();
doc.Descricao = documento.Descricao;
doc.Nome = fileName;
doc.Ficheiro = data;
dbModel.Documentoes.Add(doc);
UserDocumento userDocumento = new UserDocumento();
userDocumento.UserId = userId;
userDocumento.DocumentoId = doc.ID;
dbModel.UserDocumentoes.Add(userDocumento);
dbModel.SaveChanges();
}
else
{
Session["ErrorDoc"] = 1;
Session["SelectedTab"] = 4;
return RedirectToAction("Index", "Home");
}
}
}
catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
{
Exception raise = dbEx;
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
string message = string.Format("{0}:{1}", validationErrors.Entry.Entity.ToString(), validationError.ErrorMessage);
raise = new InvalidOperationException(message, raise);
}
}
throw raise;
}
}
ModelState.Clear();
Session["ErrorDoc"] = 0;
Session["SelectedTab"] = 4;
return RedirectToAction("Index", "Home");
}
public ActionResult DescarregarDocumento(int id)
{
using (LoginDataBaseEntities1 dbModel = new LoginDataBaseEntities1())
{
try
{
Documento doc = dbModel.Documentoes.Where(dp => dp.ID == id).FirstOrDefault();
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = Path.GetExtension(doc.Nome);
Response.AppendHeader("Content-Disposition", "attachment; filename=" + doc.Nome);
Response.BinaryWrite(doc.Ficheiro);
Response.Flush();
Response.End();
}
catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
{
Exception raise = dbEx;
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
string message = string.Format("{0}:{1}", validationErrors.Entry.Entity.ToString(), validationError.ErrorMessage);
raise = new InvalidOperationException(message, raise);
}
}
throw raise;
}
}
Session["SelectedTab"] = 4;
return RedirectToAction("Index", "Home");
}
在调试时,我注意到HttpPostedFileBase的InputStream属性始终返回空,因此为什么我不断收到这些错误。对于InputStream的ReadTimeout和WriteTimeout属性,我还遇到了以下异常:
+ ReadTimeout 'file.InputStream.ReadTimeout' threw an exception of type 'System.InvalidOperationException' int {System.InvalidOperationException}
+ WriteTimeout 'file.InputStream.WriteTimeout' threw an exception of type 'System.InvalidOperationException' int {System.InvalidOperationException}