我正在获取在上传文件几天并且隔离了问题时,无法对文件上执行所请求的操作时出现用户映射部分打开错误。这段代码不起作用
var fileName = Path.GetExtension(file.FileName);
var changename = profile.registrationID+ fileName;
var mytrail = Path.Combine(Server.MapPath("~/uploads/profilepic"), changename);
file.SaveAs(mytrail);
ImageBuilder.Current.Build(mytrail, mytrail, new ResizeSettings("width=100&height=130&mode=stretch"));
ModelState.Clear();
db.Entry(profile).State = EntityState.Modified;
db.SaveChanges();
return View(profile);
当我尝试上传图片时,我得到用户映射部分打开错误和 ImageBuilder.Current.Build(mytrail,mytrail,new ResizeSettings(“width = 100& height) = 130& mode = stretch“)); 突出显示。问题是在上面的代码中,如果我将fileName更改为
var fileName = "abc";
整个代码工作图片上传没有错误只是图片被保存为文件而不是.jpg或.gif。这2行怎么可能导致错误...
var fileName = Path.GetExtension(file.FileName);
ImageBuilder.Current.Build(mytrail, mytrail, new ResizeSettings("width=100&height=130&mode=stretch"));
中的imageResizer
答案 0 :(得分:0)
我认为imagebuider使用不当。我对它直接从磁盘位置使用的方式不够熟悉。我尝试直接使用文件流,即
var fileExtension = Path.GetExtension(file.FileName);
var fileName = profile.registrationID+ fileExtension;
var filePathAndName = Path.Combine(Server.MapPath("~/uploads/profilepic"), fileName );
using(var outStream = new MemoryStream()){
ImageBuilder.Current.Build(file.InputStream, outStream, new ResizeSettings("width=100&height=130&mode=stretch"));
FileStream file = new FileStream(filePathAndName, FileMode.Create, System.IO.FileAccess.Write);
byte[] bytes = new byte[outStream.Length];
outStream.Read(bytes, 0, (int)outStream.Length);
file.Write(bytes, 0, bytes.Length);
file.Close();
}
请注意此代码未经测试
答案 1 :(得分:0)
实际上,它是easier than that。
ImageBuilder.Current.Build(file,
"~/uploads/profilepic/" + profile.registrationID + ".<ext>",
new ResizeSettings("width=100&height=130&mode=stretch"));
你让ImageResizer做得越多,工作就越快,越安全。您之前的代码允许上传任何扩展文件 - 这是一个巨大的潜在利用机会。 &LT;分机&GT;只允许图片扩展。