我在asp mvc上进行上传,它首先用户尝试将文件附加到模型中,文件是system.web.httpfilewrapper。
但是当涉及到第二次尝试控制器从其他文本框中捕获无效金额,并且它回发给用户说无效,此后用户输入有效金额,然后它返回到控制器,此处此处开始让我不知道发生了什么,文件突然变成了null,它无法完成将值发布到模型中的以下代码行。
if (model.File != null && model.File.ContentLength > 0)
{
Byte[] destination = new Byte[model.File.ContentLength];
model.File.InputStream.Position = 0;
model.File.InputStream.Read(destination, 0, model.File.ContentLength);
model.BankSlip = destination;
}
毕竟我决定使用另一种方法来完成它,因为model.file是= null,所以我在第一个块添加了一些代码,让文件保存到App_Data中以获取临时并稍后检索上...
if (model.File != null && model.File.ContentLength > 0)
{
Byte[] destination2 = new Byte[model.File.ContentLength];
model.File.InputStream.Position = 0;
model.File.InputStream.Read(destination2, 0, model.File.ContentLength);
model.BankSlip = destination2;
string chg = model.File.ToString();
string file = Path.GetFileName(chg);
string NewName = chg.Replace(file, member.MemberCode+".jpg");
var fileName = Path.GetFileName(NewName);
var savepath = Path.Combine(Server.MapPath("~/App_Data"), fileName);
model.File.SaveAs(savepath);
}
它完美地工作到这一点,但问题在else块中启动,我使用文件流来回读文件并尝试将其找回模型,一切正常除外,文件仍为= Null。这是我要问的愚蠢问题,我不知道如何将系统io分配或转换为httppostedfilebase,它不断向我显示一个注释掉的错误,任何专业人士可以帮助我愚蠢的想法吗?我知道要解决这个问题,我实际上可以使用会话,但由于某些原因,我不想使用它,而是我用更长的方式来做,如果有人能解决这个问题,我将不胜感激。 / p>
else
{
FileStream fileStream = new FileStream(Path.Combine(Server.MapPath("~/App_Data"), member.MemberCode + ".jpg"), FileMode.Open, FileAccess.Read);
int read = (int)fileStream.Length;
// HttpPostedFileBase colbase = new HttpPostedFileWrapper();
//model.File = colbase;
Byte[] destination = new Byte[read];
fileStream.Position = 0;
fileStream.Read(destination, 0, read);
model.BankSlip = destination;
}
答案 0 :(得分:1)
由于httppostedfilebase只接受来自视图本身的值,它不会工作,否则它会从物理文件中获取任何内容。 :)
仍然欢迎您回答这个问题。因为我发现这是httppostedfilebase的限制。